Имеется следующий код метода:
ContentResolver musicResolver = getContentResolver();
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
@SuppressLint("Recycle")
Cursor musicCursor = musicResolver.query(musicUri,null,null,null,null);
if (musicCursor!=null && musicCursor.moveToFirst()){
int titleColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
do{
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songsList.add(new Song(thisId, thisTitle, thisArtist));
}while (musicCursor.moveToNext());
}
При выполнении выдает ошибку:
Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2341, uid=10101 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
В манифесте строка <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
присутствует. В документации посмотрел статью про разрешения https://developer.android.com/training/permissions/requesting
Понял, что это возникает из-за API, но не совсем понял, откуда берется MY_PERMISSIONS_REQUEST_READ_CONTACTS
во втором листинге и как вообще это применить к коду
UPD
Добавил метод:
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
Почему-то в логах не нашел ничего с тэгом активности, но по дебаггеру, метод возвращает false.
В таком случае вопрос - как получить доступ к данным в данной ситуации?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Надо получить номер входящего звонка, и при получении номер перейти на следующий activity
У меня есть HashMap конвертированный в ByteArray на JavaКак мне ByteArray на питоне конвертировать в map на python и обратно?
После сборки проекта mvn запускаДеплой на Jboss
Всем приветЕсть стандартный стек Java, SpringBoot-2