0

我試圖創建一個文件選取器來連接雲存儲服務。我無法將文件附加到其他應用程序,甚至Gmail也能成功取回我的「活動」結果,並根據我設置的URI/clipdata顯示適當的縮略圖。發送電子郵件時,Gmail附件響應Intent.ACTION_GET_CONTENT失敗

問題是,當你真的去發送電子郵件,Gmail通知用戶「無法發送附件」,併發送沒有附件的電子郵件。

我不知道我在做什麼錯。我嘗試將URI設置爲Intent.setData()以及使用URI並設置Intent.setClipData()。另外,我嘗試明確包含FLAG_GRANT_READ_URI_PERMISSION的標誌。這些東西都不能解決問題。

任何人如果有任何想法可能會出錯,請加以注意。其他雲供應商在通過此流程附加內容時似乎沒有問題,所以我只是不知道我做錯了什麼。

我的代碼大致看起來現在如下,仍然不會與Gmail工作:

Intent result = new Intent(); 
result.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
result.setData(uri); 

if (getActivity().getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)) { 
    String mime = Utils.getMimeType(document); 
    result.setClipData(new ClipData(document.getSimpleName(), new String[]{mime}, new ClipData.Item(uri))); 
    result.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
    result.putExtra(Intent.EXTRA_STREAM, uri); 
} 

getActivity().setResult(Activity.RESULT_OK, result); 
getActivity().finish(); 
+0

'uri'的價值是什麼?它是否指向你編寫的'ContentProvider',你有'android:grantUriPermissions'集合? – CommonsWare 2014-10-16 22:34:17

回答

0

原來,問題是,文件的URI是位於存儲目錄/存儲/模擬/ 0/folder_name(新文件(Environment.getExternalStorageDirectory(),「folder_name」)不起作用)。切換到Context.getExternalCacheDir()(/ s​​dcard/Android/data/packageName /)Gmail已成功獲取附件。

顯然,Gmail比其他應用程序(在更改之前工作正常)更嚴格地訪問訪問文件的權限。不幸的是,沒有錯誤信息,而是Gmail在這種情況下發生的事後失敗,並不是直截了當地發現它爲什麼不起作用。

相關問題