Intent для доступа к файлам в Android10

Моя программа использует файлы пользователя (фотографии и музыку). Для их выбора я использую Intent.

            Intent intent;
            intent = new Intent();
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.setType("audio/mpeg");
            startActivityForResult(Intent.createChooser(intent, "mp3"), GET_MP3);

Я сохраняю пути к файлам для дальнейшей работы с ними. Получаю их так.

    Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
    if(cursor == null){
        result = contentURI.getPath();
    } else{
        cursor.moveToFirst();
        //int count = cursor.getCount();
        for(int i = 0; i < cursor.getColumnCount(); i++){
            Log.d("m1", cursor.getColumnName(i) + " - " + cursor.getString(i));
        }
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        if(idx > -1)
            result = cursor.getString(idx);
        else
            Toast.makeText(context, "file not found", Toast.LENGTH_LONG);

        cursor.close();
    }

Но в андроид 10 я более не могу получить абсолютный путь. Копировать файлы себе в программу локально сильно увеличивает размер.

Существует ли другой способ сохранить ссылку на файлы для дальнейшего использования??


Ответы (1 шт):

Автор решения: Sergei Buvaka

В Android 10 вы больше не можете напрямую обращаться к файлам на устройстве. Google отказываются от этого подхода т.к. это не секьюрно.

Если вы хотите работать с файлами то у вас есть несколько путей:

  • Media Store - для работы с медиа файлами, такими как аудио, видео, фото.
  • Storage Access Framework - для работы с файлами други поставщиков. Файлами которые шарят другие приложения и которые находятся в общем доступе у пользователя на устройстве.
  • File Provider - для работы с внутренними файлами приложения.
→ Ссылка