tôi có những quyền như tôi:Permission sự khước từ nào MediaDocumentsProvider
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
tôi nhận được một lỗi cho phép từ chối ở đây trên dòng openInputStream:
if(bgUri != null && !bgUri.isEmpty()) {
try {
InputStream inputStream = context.getContentResolver().openInputStream(Uri.parse(bgUri)); // <-- error
return Drawable.createFromStream(inputStream, bgUri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
đầu tiên tôi tải hình ảnh của tôi với
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
if (requestCode == SELECT_PHOTO && resultCode == Activity.RESULT_OK) {
try {
final Uri imageUri = imageReturnedIntent.getData();
final int takeFlags = imageReturnedIntent.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Check for the freshest data.
mContext.getContentResolver().takePersistableUriPermission(imageUri, takeFlags);
sau đó lưu hình ảnh uri:
String backgroundURI = imageUri.toString();
int backgroundID = 0;
mStore.backgroundImageURI = backgroundURI;
mStore.backgroundImageNumber= backgroundID;
mStore.save();
Stack trace:
﹕ FATAL EXCEPTION: main
Process: com.myapp.pocketandroid, PID: 1284
java.lang.RuntimeException: Unable to resume activity {com.myapp.pocketandroid/com.myapp.pocketandroid.MainActivity}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{52946004 1284:com.myapp.pocketandroid/u0a60} (pid=1284, uid=10060) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2774)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2803)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{52946004 1284:com.myapp.pocketandroid/u0a60} (pid=1284, uid=10060) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
at android.os.Parcel.readException(Parcel.java:1465)
at android.os.Parcel.readException(Parcel.java:1419)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2848)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:4399)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2208)
at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1425)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1047)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:904)
at android.content.ContentResolver.openInputStream(ContentResolver.java:629)
at com.myapp.pocketandroid.Utils.BackgroundImageManager.background(BackgroundImageManager.java:29)
at com.myapp.pocketandroid.BaseActivity.setBackground(BaseActivity.java:83)
at com.myapp.pocketandroid.BaseActivity.onResume(BaseActivity.java:44)
Tại sao tôi nhận được sự cho phép sụp đổ MediaDocumentsProvider
khi tôi tiếp tục hoạt động của tôi và cố gắng để tải các URI? Tôi nghĩ rằng bằng cách cho phép tôi giữ quyền vĩnh viễn.
Vui lòng đăng mã của bạn "cố gắng tải URI" cùng với dấu vết ngăn xếp hoàn chỉnh. – CommonsWare
@CommonsGặp sự cố là trong khối mã đầu tiên. Tôi đã thêm một dấu vết ngăn xếp. – quantumpotato
Bạn đang làm gì giữa việc gọi 'takePersistableUriPermission()' và 'openInputStream()'? Bạn đã viết rằng bạn nhận được sự cố này khi bạn "tiếp tục hoạt động của bạn". Bạn có nghĩa là điều này nghĩa đen (tức là, nó là cùng một ví dụ hoạt động như bạn đã sử dụng với 'takePersistableUriPermission()' và chỉ quay trở lại nền trước)? Hay bạn ám chỉ điều gì khác? – CommonsWare