Android 12, родное ПЗУ, SDK 31.
Мне нужно читать файлы с OTG USB ключ из 2 приложений:
[*]Мое приложение, которое является установщиком. Он устанавливает APK и восстанавливает некоторые данные на внешней SD-карте или USB-устройстве OTG.
[*]Приложение Termux, загруженное с github и измененное для запроса прав.
Манифест включает в себя:
Код: Выделить всё
Первый метод:
Код: Выделить всё
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
CTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION");
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
String name = getPackageName();
Uri uri = Uri.fromParts("package", name, null);
intent.setData(uri);
startActivity(intent);
}
}
Код: Выделить всё
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!getPackageManager().canRequestPackageInstalls()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivityForResult(intent, 501);
}
}
Даже если я завершаю свое действие с помощью Finish() и запускаю снова мое приложение, у меня нет доступа.
Но если я убью свое приложение с помощью диспетчера задач и запущу его, я получу право.
Но когда я уничтожу свое приложение с помощью управления задачами и запускаю это снова, затем я получаю доступ к USB-ключу.
В обоих приложениях для доступа к ключу ISB я использую команды Linux.
[*]С помощью команды mount я проверяю, видит ли USB-ключ Android.
[*]С помощью USBPATH=$(grep -E "^[^ ]+ /mnt/media_rw /[A-Z0-9]{4}-[A-Z0-9]{4} " /proc/mounts | Cut -d' ' -f2) Я получаю путь к ключу
С ls $USBPATH я вижу, что у меня нет прав даже после того, как MANAGE_EXTERNAL_STORAGE было предоставлено, потому что ls возвращает «разрешение отклонено».
Подробнее здесь: https://stackoverflow.com/questions/782 ... -all-files
Мобильная версия