android 禁止后不再询问

2020-07-01  本文已影响0人  方_f666

一、动态权限被禁止且不再提示(以读写权限为例)
这种情况一般弹出Dialog提示用户前往设置界面开启权限,一般手机我们会前往 权限管理界面,且不同的生产厂商的手机具体方法不同,我们要做判断来适配。但对于有些手机的存储权限,我们会发现权限管理界面找不到打开的开关,例如:华为M2平板,它的打开存储权限在 应用管理界面 中。所以即使同一厂商的手机,我们也要筛选特殊情况前往 应用管理界面。
1. HUAWEI (华为)
权限管理界面:
Intent intentHW = new Intent("自己应用的包名");
intentHW.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName comp = new ComponentName("com.huawei.systemmanager",
"com.huawei.permissionmanager.ui.MainActivity");
intentHW.setComponent(comp);
startActivity(intentHW);
应用管理界面:
Intent intentHW = new Intent("自己应用的包名");
intentHW.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName comp = new ComponentName("com.android.settings",
"com.android.settings.Settings$ManageApplicationsActivity");
intentHW.setComponent(comp);
startActivity(intentHW);
应用管理界面选择自己应用后的应用信息界面:(推荐使用)
Intent intentHW = new Intent("自己应用的包名");
intentHW.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName comp = new ComponentName("com.android.settings",
"com.android.settings.applications.InstalledAppDetailsTop");
intentHW.setData(Uri.parse("package:" + "自己应用的包名"));
intentHW.setComponent(comp);
startActivity(intentHW);
应用管理界面选择自己应用后的应用信息界面再选择权限后的界面:(应该不能跳)
2. MEIZU (魅族)
权限管理界面:
Intent intentMZ = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intentMZ.addCategory(Intent.CATEGORY_DEFAULT);
intentMZ.putExtra("packageName", BuildConfig.APPLICATION_ID);
startActivity(intentMZ);
二、手机设置界面的Activity怎么看
上面的跳转很多都是设置ComponentName,查看对应设置界面的Activity方法,将手机打开到那个设置界面,连接adb,利用 adb shell dumpsys activity activities 命令便可查看该界面全路劲,该命令不仅适用设置界面,也适用自己的app。
三、跳转设置界面的拓展
android.provider.Settings 类中定义了很多设置界面的action,利用此action便可跳到对应页面,在该类中查找 @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 可以查到有90个这样的action,具体使用(示例为悬浮于其它应用之上的权限开关)
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + "自己应用的包名"));
startActivityForResult(intent, 191115);
这些定义的90个action中并没有 应用管理界面选择自己应用中的权限后的界面 action,甚至没有很多我们想要到达的界面,有些界面可能并不给第三方app开放,有些界面也许没有找见正确的方法。

switch (Build.MANUFACTURER) {
case Constants.ROM_HUAWEI: // 华为
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
comp = new ComponentName("com.huawei.systemmanager",
"com.huawei.permissionmanager.ui.MainActivity");
intent.setComponent(comp);
startActivity(intent);
break;
case Constants.ROM_MEIZU: // 魅族
intent.setAction("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
startActivity(intent);
break;
case Constants.ROM_XIAOMI: // 小米
intent.setAction("miui.intent.action.APP_PERM_EDITOR");
intent.setClassName("com.miui.securitycenter",
"com.miui.permcenter.permissions.PermissionsEditorActivity");
intent.putExtra("extra_pkgname", getPackageName());
startActivity(intent);
break;
case Constants.ROM_SONY: // 索尼
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
comp = new ComponentName("com.sonymobile.cta",
"com.sonymobile.cta.SomcCTAMainActivity");
intent.setComponent(comp);
startActivity(intent);
break;
case Constants.ROM_OPPO: // oppo
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
comp = new ComponentName("com.color.safecenter",
"com.color.safecenter.permission.PermissionManagerActivity");
intent.setComponent(comp);
startActivity(intent);
break;
case Constants.ROM_LG: // LG
intent.setAction("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
comp = new ComponentName("com.android.settings",
"com.android.settings.Settings$AccessLockSummaryActivity");
intent.setComponent(comp);
startActivity(intent);
break;
case Constants.ROM_LETV: // 乐视
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
comp = new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.PermissionAndApps");
intent.setComponent(comp);
startActivity(intent);
break;
default:
// 跳转权限设置界面
intent.setAction(Settings.ACTION_SETTINGS);
startActivity(intent);
break;
}

上一篇下一篇

猜你喜欢

热点阅读