Доступ к чтению файлов из внутреннего хранилища

125
09 августа 2019, 15:50

Имеется следующий код метода:

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.

В таком случае вопрос - как получить доступ к данным в данной ситуации?

READ ALSO
Как получить номер входящего звонка?

Как получить номер входящего звонка?

Надо получить номер входящего звонка, и при получении номер перейти на следующий activity

134
HashMap to ByteArray. из Java в Python

HashMap to ByteArray. из Java в Python

У меня есть HashMap конвертированный в ByteArray на JavaКак мне ByteArray на питоне конвертировать в map на python и обратно?

118
Error: Could not find or load main class JAVA_OPTS=

Error: Could not find or load main class JAVA_OPTS=

После сборки проекта mvn запускаДеплой на Jboss

135
SPRING - DataSource (SQL Error: 1054, SQLState: 42S22)

SPRING - DataSource (SQL Error: 1054, SQLState: 42S22)

Всем приветЕсть стандартный стек Java, SpringBoot-2

108