Я пытаюсь читать пути изображений из хранилища и я постоянно получаю SecurityException здесь:не может запросить разрешения READ_EXTERNAL_STORAGE
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()
Я компиляция против апи 23 и разрешения четко указаны в моем Manifest как прямые ребенок моего манифеста. Я также понимаю, что в новых разрешениях времени выполнения вы должны запрашивать разрешение во время выполнения, когда хотите получить доступ к хранилищу. Когда я пишу эту линию, которая бы начать проверку для разрешения я получить не может решить проблему в 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 im, получающим SecurityExeption. Любые и вся помощь ценится, заранее спасибо
Я думаю, что вы столкнулись с этой проблемой в Android 6.0 Marshmallow, я также сталкиваюсь с такой же проблемой, но я не могу запросить разрешение на чтение для внешнего хранилища. Есть ли у вас какой-либо способ? – Herry
Хорошо, я нашел это из вашего комментария ниже. – Herry
Здравствуйте, попробуйте это для API-уровня 23 http://stackoverflow.com/a/41221852/5488468 –