Столбец ALBUM_ART устарел из API 29 и так далее. Как получить путь? - PullRequest
3 голосов
/ 20 сентября 2019

В настоящее время мы получаем путь к обложке альбома, используя: MediaStore.Audio.AlbumColumns.ALBUM_ART, и успешно получаем путь, за исключением пикселя 3a (Android 10).После некоторых исследований ALBUM_ART стал устаревшим API 29 и более, как показано: Здесь

В этой ссылке сказано: «Приложения могут не иметь разрешений файловой системы для прямого доступа к этому пути. Вместопытаясь открыть этот путь напрямую, приложения должны использовать ContentResolver # loadThumbnail, чтобы получить доступ. "

Мои вопросы:
1) Я уже сообщаю приложению о манифесте разрешений для доступа к внешнему хранилищу (READ_EXTERNAL_STORAGE) и запрашиваю разрешение при навигации в приложении.Какие разрешения я должен предоставить, чтобы разрешить доступ к обложкам альбомов, чтобы получить путь?

2) Мне не удается найти какой-либо контент в loadThumbnail онлайн (и даже в классе ContentResolver через код,в то время как я использую target и компилирую SDK 29), если 1) невозможно, то как мне использовать loadThumbnail и почему он не отображается в коде?

Заранее спасибо.

1 Ответ

3 голосов
/ 20 сентября 2019

Чтобы использовать метод ContentResolver, убедитесь, что у вас установлен последний SDK и соответствующие инструменты, и в своем коде сначала создайте экземпляр объекта ContentResolver, а затем используйте его соответствующим образом:

public class MainActivity extends AppCompatActivity {
    public ContentResolver resolver;
    Bitmap albumArt;
    Size size;
    Uri uriOfItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        resolver = new ContentResolver(this) {
            @NonNull
            @Override
            public Bitmap loadThumbnail(@NonNull Uri uri, @NonNull Size size, @Nullable CancellationSignal signal) throws IOException {
                return super.loadThumbnail(uri, size, signal);
            }
        };
        //uriOfItem = uri of your file
        size = new Size(100, 100);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            try {
                albumArt = resolver.loadThumbnail(uriOfItem, size, null);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

РЕДАКТИРОВАТЬ:когда дело доходит до вашего первого вопроса, если @Rj_Innocent_Coder не возражает против меня, включая его комментарий здесь:

В рамках функции хранения с ограничением объема в Android Q, Google объявил, что SAF (инфраструктура доступа к хранилищу)заменит нормальные разрешения на хранение.Это означает, что даже если вы попытаетесь использовать разрешения на хранение, он предоставит доступ только к определенным типам файлов для файла и пути к файлу для использования

РЕДАКТИРОВАТЬ 2: после @ hetoan2комментарий Я снова проверил документацию и заметил, что ContentResolver является абстрактным, поэтому не может использовать ContentResolver.loadThumbnail() в качестве вызова метода. Это означает, что в упражнении вы можете просто использовать следующее :

Bitmap albumArt = getContentResolver().loadThumbnail(uriOfFile, sizeOfAreaThatDisplaysThumbnail, cancellationSignalOrNull);
...