今天给大家分享一份关于Android 7.1版本的一个新特性 Shortcut
它是谷歌在Api Level 25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按
某些APP图标就会弹出菜单,如下表:

相信大家在使用7.1版本以及7.1版本以上的android手机的时候,在不小心长按的时候,都会触发如上表中的功能。查阅完系统更新的文档才知道该功能叫做App Shortcuts

其实这个长按桌面图标展示快捷方式已经普及很多App了,一是Android很早的版本就已经支持,二是大部分的应用也已经实现,像微信,支付宝,头条等,所以我们也要赶紧跟紧迭代的脚步,等自己遇到的时候,也能快速解决!

App Shortcuts该如何实现?

其实查阅系统文档,可知有两种方式可以实现shortcuts:

  1. 静态形式:在APK中包含一个资源文件来描述Shortcut。这种注册方法将导致:如果你要更新Shortcut,你必须更新整个应用程序
    目前,每个应用最多可以注册5个Shortcuts,无论是动态形式还是静态形式。
  2. 动态形式:在运行时,通过ShortcutManager
    API来进行注册。通过这种方式,你可以在运行时,动态的发布,更新和删除Shortcut。

静态写法:

静态写法?说白了和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  快捷方式唯一的idandroid:shortcutShortLabel  短名称android:shortcutLongLabel  这里是配置的长名称, launcher会优先选择长名称显示,显示不下会选择短名称android:action    android.intent.action.VIEWandroid:targetClass  要跳转到哪个目标类android:targetPackage  指定一个目标应用的包名categories  android.shortcut.conversation--><shortcutandroid:enabled="true"android:icon="@drawable/mine_img"android:shortcutId="MyMine"android:shortcutShortLabel="@string/mine"><intentandroid: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><shortcutandroid:enabled="true"android:icon="@drawable/collection_img"android:shortcutId="MyCollection"android:shortcutShortLabel="@string/collection"><intentandroid: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允许你完成动态快捷键下面的操作:

  • 动态添加:使用setDynamicShortcuts()重新定义的动态快捷键的完整列表,或者使用addDynamicShortcuts()以增加动态快捷键的现有列表。
  • 动态移除:删除使用一组动态的快捷键removeDynamicShortcuts()或使用删除所有动态快捷键removeAllDynamicShortcuts()
  • 动态更新:使用updateShortcuts()方法。
动态运行效果如下:

//获取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

Android 长按APP图标弹出快捷方式(shortcuts)相关推荐

  1. android笔记:长按APP图标弹出快捷方式(shortcuts)

    最近刚入手一部华为mate10Pro的手机,是基于android8.0的,看过发布会知道mate10有一个这样的功能,长按app的图标会弹出一个快捷方式,效果如下图所示: ,看一张动图 当时挺感兴趣, ...

  2. 【详细】长按APP图标弹出快捷方式,ShortCut功能实现

    Shortcuts介绍 Android7.1(API Level 25)及以上系统可以自定义Shortcuts,通过在桌面上长按App Icon弹出Shortcut列表,点击某个shortcut可使用 ...

  3. [Swift]自定义点击APP图标弹出的快捷方式

    开发中的APP,不做任何处理,点击弹出的快捷方式. 上线的APP,不做任何处理,点击弹出的快捷方式. 自定义快捷方式 func application(_ application: UIApplica ...

  4. 简书红米MIUI-7.5兼容性缺陷:长按文字时弹出的复制粘贴菜单缺少背景色

    如题,文章阅读界面,长按文字时弹出的"复制|全选|网络搜索|分享"菜单缺少背景色,导致如下图所示文字重叠效果,属于操作系统级别用户体验缺陷 控件与正文重叠 不重叠 图片发自简书Ap ...

  5. android 锁屏界面弹出qq,Android锁屏状态下弹出activity,如新版qq的锁屏消息提示

    Android锁屏状态下弹出activity,如新版qq的锁屏消息提示 发布时间:2020-06-26 21:27:13 来源:51CTO 阅读:1643 作者:lp5345 在接收消息广播的onRe ...

  6. android 弹出编辑框,Android编程实现的EditText弹出打开和关闭工具类

    本文实例讲述了Android编程实现的EditText弹出打开和关闭工具类.分享给大家供大家参考,具体如下: 需求: 使用代码实现Android的输入框EditText对键盘的关闭弹出的实现. 代码: ...

  7. [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

    [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决? window.addEventListener("resize", function () {if ...

  8. android PopupWindow实现从底部弹出或滑出选择菜单或窗口

    android PopupWindow实现从底部弹出或滑出选择菜单或窗口 http://www.open-open.com/lib/view/open1379383271818.html http:/ ...

  9. android studio自定义app图标

    android studio自定义app图标 1.右键app名称-New-ImageAsset 2. 选择Launcher Icons(Legency only) Name 图标名称这里不要更改 不更 ...

最新文章

  1. wpf MVVM ViewModel 关闭View显示
  2. 【BERT】BERT模型压缩技术概览
  3. 运维人员mysql如何访问_MySQL运维实战 之 PHP访问MySQL你使用对了吗
  4. 关于landau函数
  5. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
  6. Linux+CLion+cmake 动态链接库的使用
  7. Android Glide图片加载框架(四)回调与监听
  8. 手机modem开发(5)---LTE基本架构
  9. Fiddler--QUICKEXER
  10. [导入]在SYBASE数据库中使用游标(Cursors)将多行查询结果进行逐行处理
  11. 同样学软件测试,为什么有些人一面试就拿一堆大厂offer?
  12. centos7安装terminator
  13. 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:非hash方法
  14. (转)UML类图与类的关系详解
  15. Atitit 服务器运维linux常用命令attilax总结.docx 1. 重要命令 1 1.1. 重启系列 1 1.2. 重启nginx 1 1.3. 重启tomcat 1 2. 其他 2 2
  16. π型滤波频率计算_π型电感滤波电路计算
  17. 网络游戏植入营销的成功案例
  18. 网站优化:测试网站速度的8款免费工具推荐
  19. Java 方法参数传递
  20. 当程序员变身为黑客,现役程序员表示:我太难了!

热门文章

  1. AI-041: Python深度学习3 - 三个Karas实例-3
  2. 有关计算机文献的外文和翻译,【精品文档】关于计算机专业有关的外文文献翻译成品:Spring Boot的数据访问(中英文双语对照)19.docx...
  3. 基于PHP的网上商城
  4. 四川大学信息服务平台 ScuInfo网页 JSON数据解析
  5. 动手实现一个docker引擎-1-从内核到docker的三驾马车
  6. 杜克大学电气与计算机考研,杜克大学电气与计算机工程研究生录取满足哪些要求?...
  7. 5 Mysql数据保护
  8. 7 月 24 号张小龙内部讲座《通过微信谈产品》
  9. Keil C51中code、data、bdata、idata、xdata、pdata的解释
  10. 一天一看————计算机网络参数模型与5G协议!