У меня есть приложение, которое должно обновить прошивку некоторых машин. До таргетинга на API 29 проблем не было, теперь Google Play Store нужно настроить таргетинг как минимум на API30... и началась борьба.
Средство выбора файлового менеджера, которое я использовал, больше не совместимо (не поддерживается с февраля 2020 года), я нашел новый (средство выбора файлов программных материалов), которое работает хорошо, но требует разрешения MANAGE_EXTERNAL_STORAGE (если только он не перемещается между папками, но видит их все пустой). Google не разрешает выпуск приложения в магазине Play, поскольку управление файлами не является основной задачей приложения.
Мне нужно, чтобы пользователь мог просматривать папки для поиска zip-файла с обновлением прошивки, выбирать его и позволять приложению открывать его и выполнять обновление. Этот файл может находиться где угодно на устройстве, решать пользователю, где его разместить. Решение должно быть совместимо с Android 8+ (начиная с версии 12).
Как я могу решить эту проблему? Заранее спасибо!
@blackapps вы использовали библиотеку для выбора файлов (в данном случае какую библиотеку?) или вы сами разработали сборщик файлов?
Хорошо, спасибо, я попробую это решение прямо сейчас. :-)
Как предложил мне @blackapps, удаление разрешения MANAGE_EXTERNAL_STORAGE и переключение на средство выбора системных файлов решило проблему.
На главной активности
private void fileIntent() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
}
При выборе файла
fun pickFirmwareFromStorage(context: Activity) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/zip"
// Optionally, specify a URI for the file that should appear in the
// system file picker when it loads.
val pickerInitialUri = "Download"
putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
}
startActivityForResult(context, intent, PICK_FIRMWARE_REQUEST_CODE, null)
}
Намерение ACTION_OPEN_DOCUMENT — это все, что вам нужно. Ни одно разрешение не нуждалось во мне