當使用Intent.ACTION_GET_CONTENT列出與Android系統的文件選擇器中的文件,使用Intent.ACTION_GET_CONTENT時如何避免Android操作系統5.11(也許其他操作系統也一樣),「拋出:SecurityException」
Intent openIntent = new Intent(Intent.ACTION_GET_CONTENT);
openIntent.addCategory(Intent.CATEGORY_OPENABLE);
openIntent.setType("*/*");
startActivityForResult(openIntent, ANDROID_FILE_PICKER);
和無效onActivityResult()它得到拋出:SecurityException:
「權限拒絕:開放商com.google.android.apps.docs.storagebackend.StorageBackendContentProvider ......需要android.permission.MANAGE_DOCUMENTS」
周圍的工作了例外是:
Intent openIntent = new Intent(Intent.ACTION_GET_CONTENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
openIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
openIntent.addCategory(Intent.CATEGORY_OPENABLE);
openIntent.setType("*/*");
startActivityForResult(openIntent, ANDROID_FILE_PICKER);
和onActivityResult(),這樣做:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int takeFlags = data.getFlags();
takeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
它解決了權限問題。
但更糟糕的是,從使用Intent.ACTION_GET_CONTENT到Intent.ACTION_OPEN_DOCUMENT變化導致Android的系統文件選擇菜單不顯示的內容提供商,像Dropbox的,照片等
(如指出,在Who to show more providers with ACTION_OPEN_DOCUMENT)。
所以問題是如果它必須列出Dropbox等與使用Intent.ACTION_GET_CONTENT,但如何避免獲取SecurityException?
更多代碼請。您的onActivityResult在GET_CONTENT中的外觀如何?你在InputStream中得到的執行函數 – AChez9
inputStream = context.getContentResolver()。openInputStream(uri); – lannyf
我有同樣的問題,你解決了嗎? –