SecurityException:权限拒绝:读取(仅在模拟器上)

我在我的应用程序中有两个活动,MainActivity调用ImagePicker,它具有一个GridView,用于放置手机库中的所有图像,我使用ContentResolver获取游标。

当我testing它时,它在我的手机上正常工作,但是每次都在仿真器上立即崩溃。

这里是错误日志:

java.lang.SecurityException:Permission Denial:阅读com.android.providers.media.MediaProvider uri content:// media / external / images / media从pid = 5934,uid = 10060需要android.permission.READ_EXTERNAL_STORAGE或者grantUriPermission()

我有清单写入权限,如下所示:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ImagePicker" /> </application> 

Solutions Collecting From Web of "SecurityException:权限拒绝:读取(仅在模拟器上)"

你的模拟器是什么版本的android? 你用SDK 23编译? 如果您的模拟器是棉花糖,则需要在运行时明确检查权限。 这是由于新的权限模式。

查看更多信息的权限文档: https : //developer.android.com/training/permissions/index.html

在调用方法之前,请检查权限。

 private void checkPermission(){ int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.WRITE_EXTERNAL_STORAGE); } else { callMethod(); } } 

检查许可结果。

  @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case Constants.WRITE_EXTERNAL_STORAGE: if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { callMethod(); } break; default: break; } } 

如果你的应用程序的目标版本是23,那么它会给你这个错误,如果你的要求包括API级别23,那么你需要做目标23,并需要dynamic检查权限这里是开发人员的网站示例检查https://developer.android .COM /培训/许可/ requesting.html

注意: 即使你给的目标是22或更低,你的应用程序也可以在23(没有检查许可)的情况下工作。