セキュリティ設定「不明なソース - 不明なソースからのアプリのインストールを許可する」をプログラムで設定しようとしています。
このため、DevicePolicyManager (レベル 21) は、この設定を設定する関数 (「SetSecureSetting」) を提供します (プロファイルまたはデバイスの所有者のみが使用できます)。
Device-Owner-App (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