【发布时间】:2014-04-06 08:20:17
【问题描述】:
我的应用中有一个活动,允许用户从设备中一一选择多个文件,我正在使用这样的意图:
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_attachments_activity_chooser_label)), SELECT_PICTURE);
这工作得很好,我正在选择文件的 Uri,它们看起来像这样:
content://com.android.providers.media.documents/document/image%3A42555
然后,如果文件是图像,我将使用以下方法对其进行解码:
InputStream streamForDecodeBitmap = MyApp.getContext().getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(streamForDecodeBitmap, null, options);
当用户点击一个按钮时,我通过 Intent 将 Uris 列表传递给另一个活动,在这个活动中,在一个 AsyncTask 中,我将文件编码为 base64 以通过网络发送:
InputStream is = MyApp.getContext().getContentResolver().openInputStream(uri);
byte[] inputData = getBytes(is);
is.close();
return Base64.encodeToString(inputData, Base64.DEFAULT);
问题是当我打开 inputStream 时,有时它可以工作,但大多数时候我都会收到此异常:
E/AndroidRuntime(22270): Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{42858fe0 22270:co.uk.manifesto.freeagentapp/u0a246} (pid=22270, uid=10246) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
这些是我清单中的所有权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
我正在使用 KITKAT (API 19) 的设备中进行测试。
【问题讨论】:
标签: android