3

Android デバイスの [設定] -> [セキュリティ] に移動すると、[デバイス管理] セクションの下に、[アプリの検証] の設定がいくつかあります。

AOSP の作業中に、いくつかのテスト ソフトウェアを動作させようとしています。そのため、この機能を有効または無効にする必要があります。他のいくつかの機能を無効にするコードが既にあります。それらは次のようになります。

    //Allow mock locations
    Settings.Secure.putInt(getContentResolver(),
            Settings.Secure.ALLOW_MOCK_LOCATION, 
            1);

    //Stay on while plugged in
    Settings.Global.putInt(getContentResolver(),
            Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 
            BatteryManager.BATTERY_PLUGGED_USB);

注* root として実行しているので、これらの設定を変更できます。明確にするために、私の質問は、アプリの確認の設定を変更する方法です。それはどこにありますか?

4

2 に答える 2

3

を探していSettings.Global.PACKAGE_VERIFIER_ENABLEます。ドキュメントサイトにはアップされていないようですが、ソースで見ることができます。

意味:

android.provider.Settings.java

デフォルト設定アプリによる使用例:

com.android.settings.SecuritySettings.java

于 2013-08-01T16:27:22.127 に答える
2

この質問と回答の組み合わせで@Paradopolisと@Geobitsに感謝します(賛成票を投じて)。@Geobits が正しい答えを出しました。誰かが詳細な要約とそのオプションのステータスを取得/設定する方法を必要とする場合、私は私のものを投稿しています。

PACKAGE_VERIFIER_ENABLEは API レベル 14 で最初に定義され、"verifier_enable"値は 未満android.provider.Settings.Secureです。

API レベル 14 (4.0.1_r1):

public static final String PACKAGE_VERIFIER_ENABLE = "verifier_enable";

API レベル 17 以降、その値と定義クラスが変更されました。その値は"package_verifier_enable"以下になりました。android.provider.Settings.Global

API レベル 17 (4.2_r1):

public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable";

PACKAGE_VERIFIER_ENABLEプロパティはパブリックに定義されていますが、その定義で注釈によって隠されています。Settings.Secure.PACKAGE_VERIFIER_ENABLEしたがって、またはとして使用することはできませんSettings.Global.PACKAGE_VERIFIER_ENABLEが、その値を使用することはできます。

パッケージの検証がチェックされているかチェックされていないか、またはプログラムでチェック/チェック解除されているかどうかを判断する必要がある場合は、以下のクラスを使用できます。

public abstract class DeviceSettings {

    public enum SettingsCheckStatus {
        CHECKED, UNCHECKED, UNDEFINED
    }

    public static SettingsCheckStatus isVerifyAppsChecked(Context context) {
        // PACKAGE_VERIFIER_ENABLE is added after API level 14.
        // Its value changed at API level 17

        int packageVerifierEnabledAsInt = -1;
        if (Build.VERSION.SDK_INT >= 17) {
            packageVerifierEnabledAsInt = Settings.Global.getInt(context.getContentResolver(), "package_verifier_enable", -1);
        } else if (Build.VERSION.SDK_INT >= 14) {
            packageVerifierEnabledAsInt = Settings.Secure.getInt(context.getContentResolver(), "verifier_enable", -1);
        } else {
            // No package verification option before API Level 14
        }

        SettingsCheckStatus settingsCheckStatus = SettingsCheckStatus.UNDEFINED;
        switch (packageVerifierEnabledAsInt) {
        case 0:
            settingsCheckStatus = SettingsCheckStatus.UNCHECKED;
            break;
        case 1:
            settingsCheckStatus = SettingsCheckStatus.CHECKED;
            break;
        default:
            break;
        }

        return settingsCheckStatus;
    }

    /**
     * 
     * @param context
     * @param checked
     * @return
     * 
     * You must add <b>android.permission.WRITE_SECURE_SETTINGS</b> to your application's manifest file to use this method. 
     * Keep in mind, lint error checking may show an error on your manifest. <a href="http://stackoverflow.com/questions/13801984/permission-is-only-granted-to-system-app">See link to solve it.</a> <br>
     * Note that, this method <b>can only work on rooted devices or if your application is going to be a system app.<b>
     * 
     */
    public static boolean setVerifyAppsChecked(Context context, boolean checked) {
        boolean operationCompletedSuccessfully = false;
        int packageVerifierEnabledAsInt = checked ? 1 : 0;
        try {
            if (Build.VERSION.SDK_INT >= 17) {
                operationCompletedSuccessfully = Settings.Global.putInt(context.getContentResolver(), "package_verifier_enable", packageVerifierEnabledAsInt);
            } else if (Build.VERSION.SDK_INT >= 14) {
                operationCompletedSuccessfully = Settings.Secure.putInt(context.getContentResolver(), "verifier_enable", packageVerifierEnabledAsInt);
            } else {
                // No package verification option before API Level 14
            }
        } catch (Throwable t) {
            // Your device is not rooted or your app is not a system app.
        }

        return operationCompletedSuccessfully;
    }
}
于 2013-10-31T09:29:12.760 に答える