Разрешение на установку приложений
какое разрешение надо прописать в AndroidManifest.xml, для установки приложений из этого источника?
Ответы (1 шт):
Для установки из неизвестных источников нужно запрашивать разрешение программно. Но для начала нужно в манифесте установить тоже разрешение:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
Перед самим процессом запроса разрешения можно проверить можно ли вообще такое разрешение запрашивать:
getPackageManager().canRequestPackageInstalls()
Теперь касательно программного запроса разрешения на установку приложений. Делается это все через интент (доки):
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 который вы хотите установить то можно это сделать таким способом:
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);
Так же можно установить разрешения в манифесте на изменение настроек безопасности:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
Вот тут документация про саму безопасность android системы. Для проверки разрешения установки из неизвестных источников можно сделать переменную:
boolean isNonPlayAppAllowed = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS) == 1;
и проверять при попытке установить приложение со стороны:
if (!isNonPlayAppAllowed) {
startActivity(new Intent(android.provider.Settings.ACTION_SECURITY_SETTINGS));
}