今天给大家分享一份关于Android 7.1
版本的一个新特性 Shortcut
它是谷歌在Api Level 25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按
某些APP图标就会弹出菜单,如下表:
相信大家在使用7.1版本以及7.1版本以上
的android手机的时候,在不小心长按的时候,都会触发如上表中的功能。查阅完系统更新的文档才知道该功能叫做App Shortcuts
。
其实这个长按桌面图标展示快捷方式已经普及很多App了,一是Android很早的版本就已经支持,二是大部分的应用也已经实现,像微信,支付宝,头条等,所以我们也要赶紧跟紧迭代的脚步,等自己遇到的时候,也能快速解决!
其实查阅系统文档,可知有两种方式可以实现shortcuts:
静态写法?说白了和BroadcastReceiver(广播接受者)一样 .可以在清单文件中注册
(1)首先, 我们需要在res/xml目录下创建一个新的xml文件, 这里我们命名为shortcuts.xml
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<!--
android:enabled shortcut是否可用
android:icon 快捷图标
android:shortcutId 快捷方式唯一的id
android:shortcutShortLabel 短名称
android:shortcutLongLabel 这里是配置的长名称, launcher会优先选择长名称显示,显示不下会选择短名称
android:action android.intent.action.VIEW
android:targetClass 要跳转到哪个目标类
android:targetPackage 指定一个目标应用的包名
categories android.shortcut.conversation
-->
<shortcut
android:enabled="true"
android:icon="@drawable/mine_img"
android:shortcutId="MyMine"
android:shortcutShortLabel="@string/mine">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.harry.shortcuts.MineActivity"
android:targetPackage="com.harry.shortcuts" />
<categories android:name="android.shortcut.conversation" />
<capability-binding android:key="actions.intent.CREATE_MESSAGE" />
</shortcut>
<shortcut
android:enabled="true"
android:icon="@drawable/collection_img"
android:shortcutId="MyCollection"
android:shortcutShortLabel="@string/collection">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.harry.shortcuts.CollectionActivity"
android:targetPackage="com.harry.shortcuts" />
<categories android:name="android.shortcut.conversation" />
<capability-binding android:key="actions.intent.CREATE_MESSAGE" />
</shortcut>
</shortcuts>
(2)清单文件AndroidManifest里进行配置,这个需要注意一下:只能在有action是android.intent.action.MAIN和category是android.intent.category.LAUNCHER的Activity中配置才有效,说简单点,也就是应用的主入口。
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts"/>
动态快捷键应提供指向您应用程序中特定的上下文相关操作的链接。这些操作可以在您的应用程序使用之间更改,即使应用程序正在运行,它们也可以更改。 动态快捷方式的好候选包括调用特定人员,导航到特定位置,以及查看特定游戏的当前分数。
该ShortcutManager
API允许你完成动态快捷键下面的操作:
//获取ShortcutManager对象
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
动态添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1){
//ShortcutInfo.Builder构建快捷方式
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "test_add")
.setShortLabel(getString(R.string.app_test_add))
.setIcon(Icon.createWithResource(this, R.drawable.add_img))//设置快捷图标
//跳转到百度网页
// .setIntent(new Intent(Intent.ACTION_VIEW,
// Uri.parse("https://www.baidu.com/")))
//跳转的目标,定义Activity
.setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class))
.build();
//setDynamicShortcuts()方法来设置快捷方式
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
Toast.makeText(MainActivity.this, "已添加", Toast.LENGTH_SHORT).show();
}
动态更新:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
Intent intent2 = new Intent();
intent2.setAction("android.intent.action.MAIN");
intent2.setClassName(getPackageName(),getPackageName()+".MainActivity.java");
/**
* 构建ShortcutInfo时指定相同的id,根据id去找到要更新的快捷方式
*
* 注意:唯一的id标识不可传入一个静态快捷方式的id
* 否则会抛出异常 应用会抛出错误:Manifest shortcut ID=XX may not be manipulated via APIs
*/
ShortcutInfo info = new ShortcutInfo.Builder(this,"test_add")
.setIntent(intent2)
.setLongLabel("动态更新的长名")
.setShortLabel("动态更新的短名")
.build();
shortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> dynamicShortcuts = shortcutManager.getDynamicShortcuts();
//updateShortcuts(List<ShortcutInfo> shortcutInfoList)方法更新现有的快捷方式
shortcutManager.updateShortcuts(Arrays.asList(info));
Toast.makeText(MainActivity.this, "已更新", Toast.LENGTH_SHORT).show();
}
动态移除:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
/**
* removeDynamicShortcuts(List<String> shortcutIds)方法可以删除动态快捷方式
*
* 同理,在唯一标识id和动态更新处理一样,需传入动态快捷方式的id,要不然会报同样的错误
*/
shortcutManager.removeDynamicShortcuts(Arrays.asList("test_add"));//唯一的id标识
Toast.makeText(MainActivity.this, "已移除", Toast.LENGTH_SHORT).show();
}
希望通过这篇文章大家能够了解,并且能合理应用App Shortcuts
,欢迎大家共同留言探讨!
项目地址:AndroidShortcuts