package fr.slvn.appops; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.widget.Toast; import java.util.Arrays; public class MainActivity extends Activity { private static final String[] INCOMPATIBLE_LIST = { "4.4.2" // AppOpsSummary removed from whitelist }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); launchAppOps(); finish(); } private void launchAppOps() { if (launchAppOpsViaAction()) { // Classic method for 4.3 worked ! } else if (isAndroidVersionIncompatible()) { // Cannot launch AppOps on those version uninstallAppOps(); } else if (launchAppOpsViaComponentExtra()) { // Tricky method from 4.4 worked ! } else { // Cannot launch AppOps :( uninstallAppOps(); } } private boolean launchAppOpsViaAction() { Intent intent = new Intent("android.settings.APP_OPS_SETTINGS"); return launchAppOps(intent); } private boolean isAndroidVersionIncompatible() { return Arrays.binarySearch( INCOMPATIBLE_LIST, Build.VERSION.RELEASE ) > -1; } private boolean launchAppOpsViaComponentExtra() { 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"); return launchAppOps(intent); } protected boolean launchAppOps(Intent intent) { try { startActivity(intent); } catch (Exception e) { // Cannot launch activity ! return false; } return true; } private void uninstallAppOps() { Toast.makeText(this, R.string.error_msg, Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("package:" + getPackageName()); Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, uri); startActivity(intent); } }