我正在尝试以编程方式设置安全设置“未知来源 - 允许安装来自未知来源的应用程序”。
为此,DevicePolicyManager(级别 21)提供了一个功能(“SetSecureSetting”)来设置此设置(仅适用于配置文件或设备所有者)。
在我的设备所有者应用程序(由 NFC 配置部署)中,我尝试了以下代码:
public void allowNonMarketApps() {
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
try {
devicePolicyManager.setSecureSetting(deviceAdmin, Settings.Secure.INSTALL_NON_MARKET_APPS, "1");
} catch (SecurityException e) {
Log.d(TAG, "securityException caught");
}
}
尽管我的应用程序是设备所有者,但我总是收到 SecurityException!
有人可以帮我解决这个问题吗?
提前致谢!!
编辑 SecurityException 的输出告诉我设备所有者无法更改此设置:
java.lang.SecurityException: Permission denial: Device owners cannot update install_non_market_apps
W/System.err(27634): at android.os.Parcel.readException(Parcel.java:1547)
W/System.err(27634): at android.os.Parcel.readException(Parcel.java:1499)
W/System.err(27634): at android.app.admin.IDevicePolicyManager$Stub$Proxy.setSecureSetting(IDevicePolicyManager.java:7158)
W/System.err(27634): at android.app.admin.DevicePolicyManager.setSecureSetting(DevicePolicyManager.java:3753)
我很困惑,因为文档说的是不同的东西:
public void setSecureSetting (ComponentName admin, String setting, String value)
(在 API 级别 21 中添加)
由配置文件或设备所有者调用以更新 Settings.Secure 设置。调用者应验证设置的值是否为设置类型的正确格式。
配置文件或设备所有者可以使用此方法更新的设置包括:
DEFAULT_INPUT_METHOD
INSTALL_NON_MARKET_APPS
SKIP_FIRST_USE_HINTS