美文网首页
android 禁止后不再询问

android 禁止后不再询问

作者: 方_f666 | 来源:发表于2020-07-01 18:29 被阅读0次

    一、动态权限被禁止且不再提示(以读写权限为例)
    这种情况一般弹出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;
    }

    相关文章

      网友评论

          本文标题:android 禁止后不再询问

          本文链接:https://www.haomeiwen.com/subject/iiphqktx.html