Ответ 1
Для начала ваше приложение должно объявить targetSdkVersion
26 (уровень API для Android Oreo) или выше в вашем файле build.gradle или AndroidManifest.xml, чтобы все это работало.
Затем, чтобы ответить на вопросы выше:
- Как проверить, разрешено ли мне запрашивать установку пакета?
Вы можете проверить это с помощью getPackageManager().canRequestPackageInstalls()
любом месте вашего кода активности. Обратите внимание, что этот метод всегда возвращает false
, если вы не объявляете соответствующее разрешение или не задаете неправильную версию SDK.
- Какое точное разрешение я должен запросить?
Вы должны объявить Manifest.permission.REQUEST_INSTALL_PACKAGES
в вашем AndroidManifest.xml, например:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
- Как я могу предложить пользователю предоставить это разрешение?
Вы можете отправить пользователя в соответствующий пункт назначения с помощью Intent ACTION_MANAGE_UNKNOWN_APP_SOURCES
:
startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES));
Вы также можете отправить пользователя более конкретно к определенному параметру для вашего приложения, используя:
startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:your.application.package")));
- Как я могу предложить пользователю установить указанный.apk?
После того как вы удостоверились, что вам предоставлено соответствующее разрешение, вы можете попросить пользователя установить ваш.apk файл в любом месте вашего кода активности (где this
относится к вашему Context
активности), используя:
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setDataAndType(FileProvider.getUriForFile(this, "your.application.package.fileprovider", new File("/path/to/your/apk")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
Вы также можете добавить intent.putExtra(Intent.EXTRA_RETURN_RESULT, true)
и начать с startActivityForResult(Intent, int)
, если вы хотите узнать, была ли эта установка успешной, было отменено или не выполнено.
Информацию о том, как правильно получить файл.apk Uri, см. В разделе FileProvider
.