2013-08-02 166 views
0

我收到一個文件從一個意圖,像這樣:的Android的CanRead()返回false

Uri incoming = getIntent().getParcelableExtra(Intent.EXTRA_STREAM); 
File toStream = new File(incoming.getPath()); 

我不能從中讀取,並toStream.canRead()返回false。

我從Gallery應用程序的分享按鈕中收到了這個,其他應用程序似乎正在接收此文件。有任何想法嗎?

+0

getIntent()getExtras()getParcelable(Intent.EXTRA_STREAM)。; – KOTIOS

+0

你在哪裏有代碼 - toStream.canRead(),因爲在這裏的文檔「http://developer.android.com/reference/java/io/File.html#canRead()」它說 - 「指示是否當前上下文被允許從這個文件中讀取。「所以背景可能是問題。 – g00dy

+0

就我所知,Stacks28的代碼和我的代碼一樣。相同的結果。 – rgrasell

回答

0

有一個在SDK 23+與權限一個新的問題,這可能會導致你的讀/寫,即使你在清單固定它失敗。即使您在嘗試讀取/寫入時第一次遇到它,也會在權限下進行討論。 Link to thread where it is discussed

0

我和Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);有同樣的問題。返回的路徑類似於「/document/primary:Download/a.c」。當我使用該路徑創建File對象時,它顯示exists()canRead()false。我所做的是,走了「」之後的路徑,即「Download/a.c」,並將其與「/storage/emulated/0/」合併。所以最終路徑是「/storage/emulated/0/Download/a.c」。內部存儲工作良好。

在只有權限問題的情況下使用這個。

ActivityCompat.requestPermissions(MainActivity.this, new String[]{READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE},THIS_REQUEST_CODE); 

和覆蓋此

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
{ 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
}