【发布时间】:2011-09-14 02:02:58
【问题描述】:
我需要查看当前的 Android 设备是否允许安装来自市场以外的来源的应用程序。此选项显示在名为“未知来源”的应用程序下的设置 UI 中。
该设置基本上允许您下载和安装并非源自 Google 应用市场的 APK。
如何使用代码检查此标志是打开还是关闭?
【问题讨论】:
我需要查看当前的 Android 设备是否允许安装来自市场以外的来源的应用程序。此选项显示在名为“未知来源”的应用程序下的设置 UI 中。
该设置基本上允许您下载和安装并非源自 Google 应用市场的 APK。
如何使用代码检查此标志是打开还是关闭?
【问题讨论】:
这是使用上述设置的代码:
boolean isNonPlayAppAllowed = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS) == 1;
还向用户显示设置可能对我有用:
if (!isNonPlayAppAllowed) {
startActivity(new Intent(android.provider.Settings.ACTION_SECURITY_SETTINGS));
}
【讨论】:
此设置称为“INSTALL_NON_MARKET_APP" (click for documentation)。
(当我发现隐藏在文档深处的答案时,我基本上已经输入了问题,但名称不同,所以我决定发布问题和自我回答,因为这不是微不足道的。)
【讨论】:
boolean allow = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
allow = this.getPackageManager().canRequestPackageInstalls();
} else {
try {
allow = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS) == 1;
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
}
if (!allow)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES));
} else {
startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS));
}
【讨论】:
你可以要求包管理器告诉你
applicationContext.packageManager.canRequestPackageInstalls()
【讨论】: