java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.support.v4.content.n$3.done(ModernAsyncTask.java:161)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=30151, uid=10151 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.createException(Parcel.java:1966)
at android.os.Parcel.readException(Parcel.java:1934)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
at android.content.ContentResolver.query(ContentResolver.java:822)
at android.content.ContentResolver.query(ContentResolver.java:771)
at android.support.v4.content.e.a(ContentResolverCompat.java:80)
at android.support.v4.content.g.d(CursorLoader.java:59)
at android.support.v4.content.g.b(CursorLoader.java:37)
at android.support.v4.content.b$a.a(AsyncTaskLoader.java:1302)
at android.support.v4.content.b$a.a(AsyncTaskLoader.java:45)
at android.support.v4.content.n$2.call(ModernAsyncTask.java:138)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 3 more
在一个Activity的onCreate()里去动态申请权限,但是从Crash里还能找到Permission Denial
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { String[] permissions = { Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; ArrayList permissionRequests = new ArrayList<>();
for (String permission : permissions) {
if (PermissionChecker.checkSelfPermission(this, permission) != PermissionChecker.PERMISSION_GRANTED) {
permissionRequests.add(permission);
}
}
if (permissionRequests.size() > 0) {
requestPermissions(permissionRequests.toArray(new String[]{}), REQUESTCODE);
return;
}
}
// 后续操作
}
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(REQUESTCODE == requestCode) { for (int grantResult : grantResults) { if (grantResult != PermissionChecker.PERMISSION_GRANTED) { // finish这个Activity return; } } //后续操作 } }
后续操作是读取用户的相册里的照片,然后自己展示出来,相当于自己做了一个自定义的相册
但是我们从Crash反馈中发现,还是会出现Permission Denial的错误,而且错误就是没有授予权限就去读取一个URI的错误。
java.lang.RuntimeException: An error occurred while executing doInBackground() at android.support.v4.content.n$3.done(ModernAsyncTask.java:161) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=30151, uid=10151 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() at android.os.Parcel.createException(Parcel.java:1966) at android.os.Parcel.readException(Parcel.java:1934) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.query(ContentProviderNative.java:418) at android.content.ContentResolver.query(ContentResolver.java:822) at android.content.ContentResolver.query(ContentResolver.java:771) at android.support.v4.content.e.a(ContentResolverCompat.java:80) at android.support.v4.content.g.d(CursorLoader.java:59) at android.support.v4.content.g.b(CursorLoader.java:37) at android.support.v4.content.b$a.a(AsyncTaskLoader.java:1302) at android.support.v4.content.b$a.a(AsyncTaskLoader.java:45) at android.support.v4.content.n$2.call(ModernAsyncTask.java:138) at java.util.concurrent.FutureTask.run(FutureTask.java:266) ... 3 more
有没有大神能帮忙分析一下