VIVO【桌面图标长按快捷方式】接入指导

一、概述

1、Shortcuts是android7.0的新特性,能配置shortcuts的activity必须符合action是android.intent.action.MAIN且category是android.intent.category.LAUNCHER,;Shortcuts实现方式分为静态和动态注册。

2、vivo桌面v9.3.0以后的版本已经开放三方应用自定义快捷方式能力。

二、接入后效果

1、接入后展示效果

自定义功能由应用自身定义,最多显示4个,如上图中“微博”自定义的“热门微博”、“扫一扫”、“发微博”快捷功能。

系统提供默认的功能,由系统确定,不支持自定义,如上图中系统默认的“卸载”、“应用信息”、“编辑桌面”功能。

2、具体实现

参数说明:

shortcutId:快捷方式的唯一标示,必传属性

shortcutLongLabel:桌面优先显示此字段配置的名字

shortcutShortLabel:没有shortcutLongLabel字段或者为空时展示此字段

shortcutDisabledMessage:禁止使用快捷方式的显示字段

icon:桌面显示快捷方式需要的图标

action:通常是android.intent.action.VIEW,也可以根据自己需要更改

targetClass:对应跳转activity的全路径名

targetPackage:对应跳转activity的包名

静态注册方式:

在res文件夹下创建xml文件夹,其中放入shortcuts.xml文件,同时在AndroidManifest.xml中action符合上述2个要求的activity标签中添加<meta-data android:name=”android.app.shortcuts” android:resource=”@xml/shortcuts”/>即可,具体shortcuts.xml和AndroidManifest中的配置如下图:

特别注意其中的shortcutLongLabel,shortcutShortLabel,shortcutDisabledMessage中的string必须写在string.xml中,不然无编译

动态注册方式:

动态注册相对于静态注册灵活性更高,只要是在符合上述2个条件的Activity中可以根据需求进行添加和移除,此添加和移除原生代码是在主线程中执行,实测可以放到子线程,一般正常添加快捷方式都是在onCreate()中第一次进入直接添加即可,重复添加和多次删除同一个ID,测试无异常;

写法如下图:

VIVO【桌面图标角标】适配说明

一、概述

桌面图标角标,接入完成后需要用户手动开启,开启完成后收到新消息时,在已安装的应用桌面图标右上角显示“数字角标”。

二、接入后效果

1、接入后展示效果

应用有新消息需要告知用户时,在桌面显示数字角标。

显示效果同上图中的“应用商店”、“vivo官网”右上角数字角标。

2、“桌面图标角标”默认关闭

接入成功后,“桌面图标角标”默认关闭,需要用户手动开启。

开启路径:“设置”-“通知与状态栏”-“应用通知管理”-应用名称-“桌面图标角标”。

未成功接入“桌面图标角标”的应用,无“桌面图标角标”选项。

备注:视OS版本差异,“桌面图标角标”名称可能为“应用图标标记”或“桌面角标”。

3、具体实现

a. 添加权限:

<uses-permission android:name=”com.vivo.notification.permission.BADGE_ICON” />

b. 应用在需要显示桌面角标的场景,通过广播将信息发送给vivoLauncher:

广播参数:

action:launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM

packageName:应用包名

className:主类名

notificationNum:未读消息数目

简单示例:

Intent intent = new Intent();

int missedCalls = 10;

intent.setAction(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);

intent.putExtra(“packageName”, “com.android.xxxx”);

intent.putExtra(“className”, “com.android.xxxx.Mainxxxx”);

intent.putExtra(“notificationNum”, missedCalls); 

intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);

sendBroadcast(intent);

注意: 

在8.0上,还需要给Intent加上下面的flag

Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND