无法请求 READ_EXTERNAL_STORAGE 权限
cannot request READ_EXTERNAL_STORAGE permission
我正在尝试从存储中读取图像路径,但我一直在此处收到 SecurityException:
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=31409, uid=10053 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我正在根据 api 23 进行编译,并且在我的清单中明确说明了作为我的清单的直接子项的权限。我也明白,新的运行时权限规定,当您想要访问存储时,您必须在运行时请求许可。当我编写将开始检查权限的这一行时,我在 IDE:
中遇到无法解决的问题
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
无法解析符号 Manifest.permission.READ_EXTERNAL_STORAGE。我可以在我的代码中明确说明的唯一 Manifest.permission 是 Manifest.permission.C2D_MESSAGE 而不会出现无法解决的错误。我还需要编译其他东西才能访问代码中的其他权限吗?
需要说明的是,这是给我 SecurityException 的代码块:
public List<String> getCameraImagesFull(Context context) {
Cursor cursor = null;
String[] star = {"*"};
ArrayList<String> result = new ArrayList<>();
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
result.add(path);
} while (cursor.moveToNext());
}
cursor.close();
}
return result;
}
这是抛出异常的行:
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
下面是我的清单中规定的所有权限:
<permission
android:name="com.example.gcm.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
我只是想知道如何请求该权限以便我可以获得图像路径。当我针对任何 Lollipop 构建进行编译时,这一切都有效,只是在 Marshmallow 上获得了新的运行时权限,我得到了 SecurityExeption。感谢任何和所有帮助,提前致谢
cannot resolve symbol Manifest.permission.READ_EXTERNAL_STORAGE
您需要为 android.Manifest
添加一个导入语句,就像您为任何其他 Java class.
添加一样
The only Manifest.permission that i can clearly state in my code is Manifest.permission.C2D_MESSAGE without getting a cannot resolve error
没有这样的值 (C2D_MESSAGE
) in android.Manifest.permission
。我什至不知道哪里有一个 Manifest
class,一个 permission
内部 class,一个名为 C2D_MESSAGE
.
的字段
我正在尝试从存储中读取图像路径,但我一直在此处收到 SecurityException:
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=31409, uid=10053 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我正在根据 api 23 进行编译,并且在我的清单中明确说明了作为我的清单的直接子项的权限。我也明白,新的运行时权限规定,当您想要访问存储时,您必须在运行时请求许可。当我编写将开始检查权限的这一行时,我在 IDE:
中遇到无法解决的问题ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
无法解析符号 Manifest.permission.READ_EXTERNAL_STORAGE。我可以在我的代码中明确说明的唯一 Manifest.permission 是 Manifest.permission.C2D_MESSAGE 而不会出现无法解决的错误。我还需要编译其他东西才能访问代码中的其他权限吗?
需要说明的是,这是给我 SecurityException 的代码块:
public List<String> getCameraImagesFull(Context context) {
Cursor cursor = null;
String[] star = {"*"};
ArrayList<String> result = new ArrayList<>();
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
result.add(path);
} while (cursor.moveToNext());
}
cursor.close();
}
return result;
}
这是抛出异常的行:
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
下面是我的清单中规定的所有权限:
<permission
android:name="com.example.gcm.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
我只是想知道如何请求该权限以便我可以获得图像路径。当我针对任何 Lollipop 构建进行编译时,这一切都有效,只是在 Marshmallow 上获得了新的运行时权限,我得到了 SecurityExeption。感谢任何和所有帮助,提前致谢
cannot resolve symbol Manifest.permission.READ_EXTERNAL_STORAGE
您需要为 android.Manifest
添加一个导入语句,就像您为任何其他 Java class.
The only Manifest.permission that i can clearly state in my code is Manifest.permission.C2D_MESSAGE without getting a cannot resolve error
没有这样的值 (C2D_MESSAGE
) in android.Manifest.permission
。我什至不知道哪里有一个 Manifest
class,一个 permission
内部 class,一个名为 C2D_MESSAGE
.