Для начала ваше приложение должно объявить 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" />
- Как я могу предложить пользователю предоставить это разрешение?
Вы можете отправить пользователя в соответствующее место назначения с намерением 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)
, если хотите знать, была ли установка успешной, отменена или не удалась.
Информацию о том, как правильно получить Uri файла .apk, см. в разделе FileProvider
. а>.
person
Patneu
schedule
14.04.2018
targetSdkVersion is 22
иcompileSdkVersion is 26
, Как я могу проверитьgetPackageManager().canRequestPackageInstalls()
для этого случая. метод всегда возвращает false. - person Chirag Savsani   schedule 19.11.2018