Android 4.3以降でAppOpsを呼び出す方法 (KITKAT対応)

Android 4.3.1以降で呼び出せなくなっていると思われたAppOpsですが、以下の方法で呼び出すことが可能であることがわかりました。

追記(2013/12/10): Android 4.4.2では以下の方法でも呼び出せなくなってしまいました。

開発者オプションを有効にしてUSBデバッグ接続している場合、PCから以下のようにコマンドを入れるとAppOpsを呼び出すことができます。

% adb shell am start -n com.android.settings/com.android.settings.Settings \
-e :android:show_fragment com.android.settings.applications.AppOpsSummary \
--activity-clear-task --activity-exclude-from-recents

改行なしだと読みにくくなるため、バックスラッシュで行を区切っていますが、1行で入力しても構いません。

それをコードで書くと以下のようになります。

Intent intent = new Intent();
intent.setClassName("com.android.settings",
        "com.android.settings.Settings");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
        Intent.FLAG_ACTIVITY_CLEAR_TASK |
        Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra(":android:show_fragment",
        "com.android.settings.applications.AppOpsSummary");
context.startActivity(intent);

いずれもAndroid 4.3でも動作することを確認しております。

追記(2013/12/6): Android 4.4.1にアップデートしたNexus5でも動作することを確認しました。

なお上記の方法は、@adakoda さんが発見された方法を基にし、別の設定画面が最近表示したアプリ一覧に残っていても確実に呼び出せるようにするために若干手を加えさせていただいたものです。

また、呼び出した結果を履歴や最近呼び出したアプリ一覧には残さないようにもしています。

元手順を発見した@adakodaさんに感謝します!

AppOpsがどういうものか、設定状態の確認をどのようにすれば良いかなどについては、当ブログの過去記事「Android 4.3 の隠し機能 AppOpsについていろいろ」や「Effective Android」(達人出版会)をご参照ください。

参考サイト: