Hello shortcuts

从Android7.1(API level25)开始,开发者可以为自己的app定制shortcuts。shortcuts使用户更便捷、快速的使用app。我个人感觉有点像ios的压力感应,但是我认为Google的shortcuts动画做的更好看:)。

shortcuts分为两种:

  1. Static shortcuts:静态shortcuts是在资源文件中定义的,所以你只能通过升级你的app来更新静态shortcuts的相关信息。

  2. Dynamic shortcuts:动态shortcuts是通过ShortcutManager相关的API来实现运行时新增、修改、移除shortcuts的。

另外关于shortcuts有以下几点小tips:

  1. 最多可以设置5个快捷方式,(但经测试最多只能显示4个)。有些启动器(launcher app)不会显示出你添加的所有的快捷方式。

  2. 用户可以长按shortcuts将其固定到桌面,Google称其为“pinned shortcuts”,pinned shortcuts的数量是没有限制的,并且开发者无权移除这些pinned shorcuts(只能用户自己移除或者删除app后自动移除,如果某个shortcuts已经被固定到桌面,即使动态删除了该shortcuts,桌面的shortcuts也不会消失且可以正常使用),但可以将其设为不可用状态(disbale)。

  3. 虽然其他app无法通过shortcuts访问你的app的元数据(metadata),但启动器(laucher)可以,所以在使用shortcuts时要注意保护用户的隐私信息。

静态shortcuts(Static Shortcuts)的使用

  1. 清单文件Manifest中在启动页添加meta-data
 <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter><meta-data android:name="android.app.shortcuts"android:resource="@xml/shortcuts" /></activity>
复制代码
  1. res文件夹内新建文件夹xml,新建文件shortcuts.xml

    //shortcuts.xml<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcutandroid:shortcutId="shortCutId1"android:enabled="true"android:icon="@drawable/icon_android"android:shortcutShortLabel="@string/compose_shortcut_short_label1"android:shortcutLongLabel="@string/compose_shortcut_long_label1"android:shortcutDisabledMessage="@string/compose_disabled_message1"><intentandroid:action="android.intent.action.VIEW"android:targetPackage="com.example.zengyazhi.myapplication"android:targetClass="com.example.zengyazhi.myapplication.Main1Activity" /><intentandroid:action="android.intent.action.VIEW"android:targetPackage="com.example.zengyazhi.myapplication"android:targetClass="com.example.zengyazhi.myapplication.Main2Activity" /><categories android:name="android.shortcut.conversation" />
    </shortcut><shortcutandroid:shortcutId="shortCutId2"android:enabled="true"android:icon="@drawable/icon_google"android:shortcutShortLabel="@string/compose_shortcut_short_label2"android:shortcutLongLabel="@string/compose_shortcut_long_label2"android:shortcutDisabledMessage="@string/compose_disabled_message2"><intentandroid:action="android.intent.action.VIEW"android:targetPackage="com.example.zengyazhi.myapplication"android:targetClass="com.example.zengyazhi.myapplication.Main2Activity" /><categories android:name="android.shortcut.conversation" />
    </shortcut>
    复制代码

    解释一下shortcut标签里的各个的属性:

    • shortcutId:shortcuts的ID
    • enabled:如果为false则不会在长按shortcuts列表中显示
    • icon:shortcuts的图标
    • shortcutShortLabel:当shortcuts固定到桌面时的标题(注意字符串只能使用string资源文件引用,不可以直接使用字符串)
    • shortcutLongLabel:长按app出现shortcuts时的标题,如果太长或未设置默认会显示shortcutShortLabel
    • shortcutDisabledMessage: 当pinned shortcuts不可用时的toast提示信息
    • shortcuts标签内的标签可以有多个,例如页面1、页面2、页面3,用户点击shortcuts后进入的是列表的最后一个(即页面3),并且可以依次回退到页面2、页面1.

动态shortcuts(Dynamic Shortcuts)的使用

使用ShortcutManager相关API来创建、更新、移除shortcuts。几种API的使用方法都类似。

  1. 使用setDynamicShortcuts()addDynamicShortcuts()来动态增加shortcuts。这两个方法有点相似,使用时要注意区别。 addDynamicShortcuts():添加shortcuts,如果存在相同的ID的shortcuts则更新信息。 setDynamicShortcuts()替换掉已有的动态shortcuts列表,如果存在相同的ID的shortcuts则更新信息。举个例子: 例如原本有shortcuts列表:
  • 标签一(lable:张三, id:one)

  • 标签二(lable:李四, id:two)

  • 标签三(lable:王五, id:three)

    使用setDynamicShortcuts()方法并传入两个ShortcutInfo:

  • 标签三(lable:赵六, id:three)

  • 标签四(lable:钱七, id:four)

    调用方法后会使shortcuts列表则变为:

  • 标签三(lable:赵六, id:three)

  • 标签四(lable:钱七, id:four)

    因为标签三的ID相同,所以更新标签三,而shortcuts列表中原来的标签一、二被移除,而且一开篇介绍shortcuts时也提到过是:如果shortcuts已被固定到桌面成为pinned shortcuts,即使shortcuts从列表中被移除了,但桌面的pinned shortcuts依然可以正常使用,除非你将其设置disable状态,即如果张三、李四被固定到桌面,即使调用setDynamicShortcuts()后长按app不会显示张三、李四,但桌面上的张三李四不会消失且可以正常使用。

  1. 使用updateShortcuts()更新shortcuts的信息

    ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
    ShortcutInfo shortCutId1 = new ShortcutInfo.Builder(MainActivity.this, "shortCutId3").setShortLabel("更改桌面标签3").setLongLabel("更改快捷方式标签3").setIcon(Icon.createWithResource(this, R.drawable.icon_chrome)).setDisabledMessage("更改不可用时提示信息3").setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com/"), this, Main1Activity.class)).build();
    shortcutManager.updateShortcuts(Arrays.asList(shortCutId1, shortCutId4));
    复制代码

    动态shortcuts也可以像静态shortcuts一样同时添加多个intent意图

    Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com/"), this, Main1Activity.class);
    Intent intent2 = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com/"), this, Main2Activity.class);
    Intent[] intents = {intent1, intent2};...
    .setIntents(intents)
    .build();
    ...
    复制代码
  2. 使用removeDynamicShortcuts()移除单个或多个动态shortcuts,使用removeAllDynamicShortcuts()移除所有的动态shortcuts

    shortcutManager.removeDynamicShortcuts(Arrays.asList("shortCutId31", "shortCutId4"));shortcutManager.removeAllDynamicShortcuts();
    复制代码
  3. 设置shortcuts为不可用状态:

    shortcutManager.disableShortcuts(Arrays.asList("shortCutId3"));
    //另一个重载的方法,可以在用户点击该shortcuts时显示错误信息
    shortcutManager.disableShortcuts(Arrays.asList("shortCutId4"), "快捷方式4已不可用");
    复制代码

需要注意的是:以上API只能操作动态shortcuts(包括pinned shortcuts),不可操作静态shortcuts,如果传入静态shortcuts的id会报IllegalArgumentException错误:Manifest shortcut ID=*** may not be manipulated via APIs

追踪shortcuts的使用

官网文档中提到以下两种情景需要调用reportShortcutUsed():

  1. 用户点击了shortcuts

  2. 用户操作了与shortcuts关联的操作

上报shortcuts的使用来预测shortcuts的优先级,帮助开发者更好得使用shortcuts。

shortcuts设计规范

App Shortcuts Design Guidelines

Android从material design设计规范推出开始到今天的Android7,个人觉得真的是不输iOS,然而至今没有广泛地被推崇,实在令人不免一声叹息。另外手上2013年发布的Nexus5升级Android7之后竟然感觉比以前还顺滑,什么叫良心?跟我一起大喊:Google大法好!

App Shortcuts 快捷方式 Android7 1 的3D Touch相关推荐

  1. Shortcuts(快捷方式) Android7

    今天无意卸载应用:什么值得买.的时候发现这个功能,才知道是Shortcuts,然后看了手机中的app,QQ.QQ浏览器.网易云.高德地图.知乎.bibi时,发现这个功能 Shortcuts的介绍 其中 ...

  2. android 圆形菜单 3d效果,谷歌官方解读安卓7.1:增加类似iPhone 3D Touch功能

    [TechWeb报道]前不久官方公布了Pixel系列手机,用来代替之前的Nexus系列,将会原生Android 7.0系统,不过很快又出现了Android 7.1版本系统,这次虽然不是大版本的系统交替 ...

  3. 在iPhone上使用3D Touch

    3D Touch入门 在iOS 9中,新iPhone将第三维度添加到了用户界面. 用户现在可以用力摁下主屏按钮来快速调出应用提供的功能菜单. 在应用中,用户现在可以用力摁下视图以查看更多内容的预览并且 ...

  4. uniapp ios支持长按app 3D Touch快捷菜单项

    uniapp ios支持长按app 3D Touch快捷菜单项 uniapp 安卓 长按app 快捷方式 shortcut 一.配置manifest.json文件 切换到代码视图,uni-app项目在 ...

  5. 安卓Android 7.1.1 shortcut实现桌面图标快捷方式跳转,类似IOS 3d touch

    一.背景介绍: 3D Touch是一种立体触控技术,被苹果称为新一代多点触控技术,是在Apple Watch上采用的Force Touch,屏幕可感应不同的感压力度触控.3D Touch,苹果iPho ...

  6. 3D Touch介绍: 一个数字压力器App和Quick Actions

    随着iPhone 6s and 6s Plus的发布,苹果介绍了全新的手机交互方式:重按手势.你应该知道,这个特性其实早已应用在苹果手表和MacBook产品中,名字叫Force Touch.它给用户交 ...

  7. 是时候来了解android7了:shortcuts(快捷方式)

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 就在前几天的一个晚上, Google召开了它的秋季发布会, 毫无悬念的宣布了它的最新手机品牌Pixel, 与此同 ...

  8. 3D Touch介绍:电子秤App与快捷操作

    随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...

  9. 3D Touch开发之App 快速入口标签(快捷菜单)

    一.简介: 自从苹果公司引入了 3D Touch 功能后,众多开发者,也开在自己的app上实现自己的 3D Touch 效果,今天我也来小秀一把. 我们先来看看,3D Touch 下的 app 快速启 ...

  10. android 7.1快捷方式App Shortcuts

    App Shortcuts 功能描述 仅支持Android 7.1 (API level 25)及以上版本 Shortcut静态和动态的总和不能超过5个,但目前仅支持4个 一.静态注册: 1.创建re ...

最新文章

  1. 大型网站架构系列:消息队列
  2. mariadb允许远程访问权限
  3. android 开发传输安全,移动应用安全开发指南(Android)--数据传输
  4. [教官] 目标中关村!偶滴工作日记
  5. dao设计模式_DAO设计模式
  6. 【本人秃顶程序员】SpringMVC工作原理详解
  7. Oracle数据库通过创建触发器实现自增功能
  8. 初用python爬取麦x学院python教学视频
  9. 纸壳cms php,纸壳CMS 3.4 发布,电商功能增强
  10. 英文简历制作必备词汇表
  11. 计算机招聘试题选择题,计算机考试题库:计算机基础练习题(39)
  12. 找工作面试会遇到哪些坑(校招篇)
  13. 七夕节给男朋友买什么礼物比较好呢?2022年七夕礼物推荐
  14. db2 hadr 起停顺序_电机顺序启停问题
  15. Cocos2d-x开发实例:使用Lambda 表达式
  16. springboot2.0优雅关闭
  17. Windows下载安装Redis
  18. c语言程序和数据是可执行,C语言学习笔记(C编程-Tan Haoqiang)
  19. Java基础 Java 泛型
  20. 《红楼梦》的读后感范文2300字

热门文章

  1. Js的前端效果编写逻辑(1)
  2. 写给我们奔三的80后们……
  3. 智能优化算法:吉萨金子塔建造优化算法-附代码
  4. 智能优化算法:探路者优化算法-附代码
  5. ArcGIS加载Excel数据连接到数据库失败的解决办法
  6. android打印动画,Android 中的转场动画及兼容处理
  7. c语言发票的编码,关于增值税发票中商品税收分类编码对应的简称
  8. 实习成长之路:MySQL九:为什么MySQL有时候会选错索引呢?
  9. JavaEE学习10--Ajax
  10. FFA 2021 专场解读 - Flink 核心技术