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 - для работы с внутренними файлами приложения.