Как установить .apk программно на Android Q? - PullRequest
0 голосов
/ 06 мая 2019

Я занимаюсь разработкой приложения и хочу поддерживать Android Q. И я использую эмулятор Android. Я скачал файл apk по пути.

/storage/emulated/0/Android/data/<package-name>/files/download/xxxxxx.apk

Я устанавливаю apk так:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileprovider", new File(apkPath));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");        
startActivity(intent);

Приведенный выше код работает нормально до Android Q. Но на Android Q я могу получить только файл uri

content://<package-name>.fileprovider/my_downloads/xxxxxx.apk

, но экран установки не отображается при отправке намерения. Мне нужна чья-то помощь. Большое спасибо!

1 Ответ

0 голосов
/ 07 мая 2019

Проблема в установке неизвестного приложения после Android O. Я должен использовать разрешение:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

и проверьте разрешение перед установкой:

getPackageManager().canRequestPackageInstalls()

Если разрешение было получено, можно продолжить установку. Иначе, мы должны отправить намерение открыть страницу разрешения:

Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_INSTALL_PERMISSION);

И мы можем обработать результат в onActivityResult.

...