Android -- 快捷方式适配(三)

Android -- 快捷方式适配(一)

Android -- 快捷方式适配(二)

踩坑之旅继续,前文介绍到了如何判断是否获取到主流机型的桌面快捷方式权限以更好的提升用户体验。本文继续进阶后续,如果我们确实没获取到权限,怎么更友好地方式去让用户授予权限。笔者也对比了目前大厂的一些实现方案。有些是只有首次添加的时候会给个引导提示,提示用户可能没有获取到权限会导致创建快捷方式失败,有些是会给个h5的链接里面是各个手机的快捷方式权限的开通步骤,有的是会直接跳转到各个机型的权限设置落地页去。

我们之前做的产品也是经过几次迭代,从最初的首次给提示--h5链接--gif图--落地页的演进,经过数据证实转化率最高的还是进落地页,这种用户可以更快捷有效的找到权限设置的方法。

下面列出主流机型跳转快捷方式权限设置的落地页的方案:

默认的兜底页面,系统提供,保质保量

    Intent defaultApi(Context context) {
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        return intent;
    }

小米手机:不同的版本有差异

        String version = getSystemProperty(MIUI_VERSION_NAME);
        if (TextUtils.isEmpty(version)) {
            return defaultApi(context);
        }
        int versionI;
        try {
            versionI = Integer.parseInt(version.substring(1));
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return defaultApi(context);
        }
        
        if (versionI >= 9) {
            Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity"));
            intent.putExtra("extra_pkgname", context.getPackageName());
            return intent;
        }

        if (versionI >= 7) {
            Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
            intent.putExtra("extra_pkgname", context.getPackageName());
            return intent;
        }

Vivo手机:

        Intent intent = new Intent();
        intent.putExtra("packagename", context.getPackageName());
        intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.SoftPermissionDetailActivity"));
        if (hasActivity(context, intent)) return intent;

        intent.setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.safeguard.SoftPermissionDetailActivity"));
        return intent;

Oppo:

        Intent intent = new Intent();
        intent.putExtra("packageName", context.getPackageName());
        intent.setClassName("com.oppo.launcher", "com.oppo.launcher.shortcut.ShortcutSettingsActivity");
        if (hasActivity(context, intent)) return intent;
        intent.setComponent(new ComponentName("com.color.safecenter", "com.color.safecenter.permission.PermissionManagerActivity"));
        return intent;

华为:

        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity"));
        return intent;

实现方案也简单,就是利用adb shell dumpsys activity / adb shell dumpsys window,找出顶级页面或者窗口再去尝试跳转就可以了(或者其他一些工具抓一下页面属性也可以),不过本人精力和项目时间问题,目前也只适配了部分主流机型及部分型号,不同的版本会有一些差异可能导致跳转失败。(但方案类似,大家可以去尝试适配下,有覆盖更全面的方案也可以分享出来,感谢万分)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值