Android 创建桌面快捷方式 您所在的位置:网站首页 创建桌面快捷方式权限有什么用 Android 创建桌面快捷方式

Android 创建桌面快捷方式

2023-07-01 05:24| 来源: 网络整理| 查看: 265

概览

  桌面快捷快捷方式,可在受支持的启动器中显示,帮助用户快速访问应用的某些功能。例如点击桌面“扫一扫”快捷方式,便启动App并且跳转到扫一扫界面。例如添加小程序到桌面,用户点击桌面快捷方式便可启动App快速进入小程序。

  在 Android 8.0(API 级别 26)及更高版本中,才支持创建桌面快捷方式。与静态和动态快捷方式不同,桌面快捷方式在受支持的启动器中显示为单独的图标

权限

创建桌面快捷方式权限不需要运行时请求,在AndroidManifest.xml声明即可。

复制代码

可是,华为、小米、OPPO、Vivo等厂商的权限管理都将创建桌面快捷方式权限设计成运行时权限,默认权限是禁止。这样我们要解决两个问题:

如何检测当前应用是否获取了创建桌面快捷方式权限 华为、小米、OPPO、Vivo检测方法不相同,具体分析过程参考《是否允许创建快捷方式的权限检测》,根据这篇文章本人已经整理好相关可运行代码 github 厂商检测方法机型有问题请issue华为反射com.huawei.hsm.permission.PermissionManager#canSendBroadcastAndroid 7-11小米反射AppOpsManager#checkOpNoThrowAndroid 7-11OPPOContentProvider查询URI:content://settings/secure/launcher_shortcut_permission_settingsAndroid 7-11VivoContentProvider查询URI:content://com.bbk.launcher2.settings/favoritesAndroid 7-11 是否可以按照运行时权限进行请求让用户进行授权同意 不可以,需要引导用户跳转应用设置界面进行权限开启,可以跳转应用设置界面,亦可以跳转单独的创建桌面快捷方式权限设置界面 应用设置界面创建桌面快捷方式权限界面 参数 创建ShortcutInfoCompat对象,必须包含ID,Intent,ShortLable三个参数。ID是唯一性,Intent是点击桌面快捷方式图标后的跳转意图,ShortLable是所创建的快捷方式显示的名称。 /** * Builder class for {@link ShortcutInfoCompat} objects. */ public static class Builder { private final ShortcutInfoCompat mInfo; public Builder(@NonNull Context context, @NonNull String id) { mInfo = new ShortcutInfoCompat(); mInfo.mContext = context; mInfo.mId = id; } ... ... /** * Creates a {@link ShortcutInfoCompat} instance. */ @NonNull public ShortcutInfoCompat build() { // Verify the arguments if (TextUtils.isEmpty(mInfo.mLabel)) { throw new IllegalArgumentException("Shortcut must have a non-empty label"); } if (mInfo.mIntents == null || mInfo.mIntents.length == 0) { throw new IllegalArgumentException("Shortcut must have an intent"); } return mInfo; } } 复制代码 Icon不是必须的,如果没有主动设置则显示默认图标。这里特别提出Icon,是由于 Android 8.0(API 级别 26)引入了自适应启动器图标,在不同设备型号上显示为不同的形状。如果设置的Icon是圆形、圆角都可能被系统调整后包了一层白边。如果设置Icon是正方形则可能某些机型直接显示为正方形。 厂商图标表现形式预期表现形式华为小米

这样我们要解决一个问题:

如何让创建的桌面快捷方式图标与App图标保持一致 将设置图标缩放为App图标的大小,然后合并绘制两个图标,取两者重合保留设置图标内容 唯一性

  根据ShortcutInfoCompat#Builder(@NonNull Context context, @NonNull String id)设置的ID可以标识每一个快捷方式。可是,华为8.0 ~ 8.1出现了一个bug,名称一致也认为是相同的快捷方式,在9.0之后就已修复。 这样我们要解决一个问题:

如何解决华为8.0 - 8.1这两个版本因为名称相同导致无法创建快捷方式的异常 遍历已有快捷方式,是否存在相同名称的快捷方式,存在则对准备创建的快捷方式改名,目前在后面加一个“.”(当然可以UUID确保完全不一样),等待创建成功的回调后,再默默根据ID对快捷方式进行更新名称操作 点击快捷方式打开App

  点击快捷方式,打开的意图是所设置的Intent,Sample给的方法是跳转一个透明界面,然后进行逻辑处理。从抽屉式中的通知、桌面快捷方式、微件等端外进入App都可以跳转透明的界面再分发做处理。

结尾

代码和Sample已经整理上传至Github



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有