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

当时挺感兴趣,于是乎网上一顿搜,才了解到这个是在android7.0上就有的新特性,也一直没有关注,感觉顿时与社会脱节了,一年多前的技术现在才被用到国产手机上。使用感觉还是比较方便的,像是iPhone的3Dtouch类似。接下来看一下这个神秘的主角。
今天的主角:Shortcuts
怎么使用使用Shortcuts?
Shortcuts 跟BroadcastReceiver一样,可以静态注册也可以利用java代码动态注册。
先来讲一下怎么静态注册Static ShortCuts
1. 首先, 我们需要在res/xml目录下创建一个新的xml文件, 这里我们命名为shortcuts.xml.

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"><shortcut
        android:shortcutId="settings"android:enabled="true"android:icon="@drawable/icon"android:shortcutShortLabel="@string/settings_short_name"android:shortcutLongLabel="@string/settings_long_name"android:shortcutDisabledMessage="@string/settings_disable_msg"><intent
            android:action="android.intent.action.VIEW"android:targetPackage="org.loader.shotcutsstatic"android:targetClass="org.loader.shotcutsstatic.SettingsActivity" /><categories android:name="android.shortcut.conversation"/></shortcut>
</shortcuts>

2 首先一个shortcuts标签, 然后是一个shortcut, 到这里我们大概可以猜测到这里可以注册多个shortcut, shortcut标签有很多属性, 我们来一个个的了解下.

1.shortcutId, 不用多说, 这肯定是一个唯一的id
2.enabled, 表示这个shortcut是否可用
3.shortcutShortLabel, 这里是配置的短名称, 下面还会有长名称, 如果长名称显示不下, 就显示短名称
4.shortcutLongLabel, 这里是配置的长名称, launcher会优先选择长名称显示
5.shortcutDisabledMessage, 这个配置是在我们选择一个不可用的shortcut时给用户的一个

提示

在shortcut标签下还有两个我们熟悉的标签.

1.intent, 这里表示我们点击shortcut时要干嘛, targetPackage是指定一个目标应用的包名, 2.targetClass是我们要跳转的目标类, 这里要注意的是android:action一定要配置, 否则会崩溃
3.categories, 这个东西目前位置官方只给提供了android.shortcut.conversation

ok, 上面的几行代码, 我们一个static shortcuts就完成了, 那如何使用呢? 是在manifest中配置activity的地方使用, 而且这个activity是有要求的.

能配置shortcuts的activity必须要有action是android.intent.action.MAIN和category是android.intent.category.LAUNCHER!

一个正确的配置示例:

<application
        android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><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><activity android:name=".SettingsActivity" /></application>

来看看最终实现的效果:

ok, 到这里, 静态配置shortcuts我们就学习完了, 是不是很简单? 那这个静态配置是用在什么地方呢? 我想了想, 这里适用的场景一般是一些固定不变的功能, 例如你APP的设置界面, 如果是一些动态的数据, 那静态配置就不适合了, 就需要我们接下来要介绍到了动态配置了.

使用Dynamic Shortcuts

在看完Static Shortcuts后, 我们不相信Google仅仅给我们开发者开放了局限性如此大的使用方式, 肯定还会存在灵活性更大的API, 是的, 这就是我们马上要讲的Dynamic Shortcuts, 我把它称为动态配置.
说起动态配置, 那肯定是用java代码实现了, 那如何实现呢?
首先第一步, 我们需要利用一下代码拿到ShortcutManager

getSystemService(ShortcutManager.class)

拿到ShortcutManager后, 我们可以调用setDynamicShortcuts(List)方法去设置Shortcut, 那这个List如何得到呢? 我们来看看完整点的代码。

private void setupShortcuts() {mShortcutManager = getSystemService(ShortcutManager.class);List<ShortcutInfo> infos = new ArrayList<>();for (int i = 0; i < mShortcutManager.getMaxShortcutCountPerActivity(); i++) {Intent intent = new Intent(this, MessageActivity.class);intent.setAction(Intent.ACTION_VIEW);intent.putExtra("msg", "我和" + mAdapter.getItem(i) + "的对话");ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + i).setShortLabel(mAdapter.getItem(i)).setLongLabel("联系人:" + mAdapter.getItem(i)).setIcon(Icon.createWithResource(this, R.drawable.icon)).setIntent(intent).build();infos.add(info);
//            manager.addDynamicShortcuts(Arrays.asList(info));}mShortcutManager.setDynamicShortcuts(infos);
}

这段代码的背景是我们模拟了一个联系人列表功能, 在launcher中我们长按图标会出现一定数量的联系人快捷方式, 点击某个快捷方式会直接跳转该联系人相关的页面. 好, 介绍完背景, 我们来看代码, 首先我们通过getSystemService(ShortcutManager.class)来拿到ShortcutManager, 接下来一个for循环, 注意这个for循环的次数, 因为我们要添加的Shortcut不能是无限个, 所以这里我们用getMaxShortcutCountPerActivity来获取到最大个数. 然后在for循环里, 我们首先构造一个intent, 注意, 这里和Static Shortcut一样, 必须要提供一个Action. 然后我们用ShortcutInfo.Builder来构造一个ShortcutInfo并且放到List中, 最终我们调用mShortcutManager.setDynamicShortcuts(infos)来设置Shortcuts.

好了, 代码其实很简单, 我们来看看效果.


是不是很666?

动态更新 Shortcuts

上面的代码我们虽然说是Dynamic, 但仅仅是使用java代码实现的罢了, 真正的Dynamic我们接下来才去讲解, 在讲解Dynamic之前, 我们先来介绍一个名词-Pinning Shortcuts, 这是个啥玩意呢? 其实对于Shortcut, Android是允许我们直接放到桌面的, 这样就更加方便了用户的操作, google把他称作为Pinning Shortcuts, 具体啥样, 我们来张图就明白了.

对于这个Pinning Shortcuts, google的文档说, 我们开发者是没有权利去删除的, 能删除它的只有用户. 那我该项功能删除了咋办? 这东西还在桌面上, 是不是APP要崩? 当然Google考虑到了这点, 它允许我们去disable这个shortcut. 具体还是来看代码, 这里我们长按item来模拟一下删除.

private void removeItem(int index) {List<ShortcutInfo> infos = mShortcutManager.getPinnedShortcuts();for (ShortcutInfo info : infos) {if (info.getId().equals("id" + index)) {mShortcutManager.disableShortcuts(Arrays.asList(info.getId()), "暂无该联系人");}}mShortcutManager.removeDynamicShortcuts(Arrays.asList("id" + index));
}
首先我们先调用mShortcutManager.getPinnedShortcuts()来获取到所有的Pinning Shortcuts, 然后去遍历它, 找到我们删除的那个, 然后通过APIdisableShortcuts(List<Ids>)来disable掉该项, 最后我们还要用过removeDynamicShortcuts(List<Ids>)来从shortcuts中移除. 来看看效果.

通过效果中, 我们可以看到, 我们disableShortcuts的那个Pinning Shortcut已经变灰了, 而且在点击的时候会提醒暂无该联系人, 这个提醒正是disableShortcuts的第二个参数.

现在, 删除和禁用我们已经了解了, 那更新呢? 假如我修改了某个联系人的名字, shortcut是不是也应该相应的修改呢? 是的, 这里还是需要我们通过代码来实现.

private void updItem(int index) {Intent intent = new Intent(this, MessageActivity.class);intent.setAction(Intent.ACTION_VIEW);intent.putExtra("msg", "我和" + mAdapter.getItem(index) + "的对话");ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + index).setShortLabel(mAdapter.getItem(index)).setLongLabel("联系人:" + mAdapter.getItem(index)).setIcon(Icon.createWithResource(this, R.drawable.icon)).setIntent(intent).build();mShortcutManager.updateShortcuts(Arrays.asList(info));
}

构建intent我们就不说了, 接下来我们又使用ShortcutInfo.Builder来构建了一个新的ShortcutInfo, 最后我们是用过updateShortcuts(List)来实现更新shortcut的, 很简单, 来看看效果.

本文重度参考的该博客:
是在鸿阳大神的博客上看到的。
http://blog.csdn.net/qibin0506
ok, 现在, Android7.1的Shortcuts功能我们就差不多介绍完了
官网的文档大家也可以多看看, 这里给出地址: https://developer.android.com/preview/shortcuts.html

android笔记:长按APP图标弹出快捷方式(shortcuts)相关推荐

  1. Android 长按APP图标弹出快捷方式(shortcuts)

    今天给大家分享一份关于Android 7.1版本的一个新特性 Shortcut 它是谷歌在Api Level 25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按 某些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. android一天一次弹窗,Android自定义Toast,多次弹出时取消上次弹出,最后一次弹出为准...

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. Android的Toast用队列管理弹出的消息,这个自定义的Toast用于频繁弹出Toas ...

  5. android 浮层菜单弹出,Android PopupWindow实现微信右上角的弹出菜单

    日常开发过程中对于PopupWindown的使用也是比较多的.这里给大家展示一下PopupWindow的使用. 修改activity_main.xml布局: xmlns:tools="htt ...

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

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

  7. Android百度地图定位APP,显示出当前位置坐标

    Android百度地图定位APP,显示出当前位置坐标 官网配置百度地图 通过CMD命令获取SHA1 在百度的官网里面创建一个应用 Android配置 显示地图即定位 配置 AndroidManifes ...

  8. Android监听系统输入法键盘弹出显示与隐藏事件

    Android监听系统输入法键盘弹出显示与隐藏事件 有时候需要监听Android系统输入法的弹出显示事件,比如:微信聊天时,不管你当前在聊天中的什么位置(上滑查看消息历史),每当你点击输入框时,都会自 ...

  9. 微信长按图片无法弹出识别二维码选项解决方案

    1.首先页面中有两个二维码的兄弟别忙活了,一个页面中只可以识别其中一个二维码,两个的话需提示用户双击放大二维码进行二维码识别. 2.网页内有一张图片进行二维码识别时长按没有反应(长按图片无法弹出识别二 ...

最新文章

  1. a good approach to make demonstrations at the baidu netdisk
  2. Javascript 创建对象方法的总结
  3. DVWA--File Upload(文件上传)--四个等级
  4. 数据结构实验之栈五:下一较大值(一)
  5. java单个数组求积_[剑指offer][Java]构建乘积数组
  6. Office Live Workspace让协同办公无处不在
  7. Spring : SpringBoot的ApplicationRunner和CommandLineRunner
  8. 用python输出所有的玫瑰花数_用Python爬取WordPress官网所有插件
  9. Android APK系列5-------修改APK中的内容
  10. 植物大战僵尸模式修改
  11. Atitit 模板引擎总结 目录 1. 模板引擎 1 2. 常见模板步骤 1 2.1. 1)定义模板字符串  1 2.2. 2)预编译模板  2 2.3. 渲染模板  2 3. 流程渲染 if el
  12. STM32电机库5.4开源注释 KEIL工程文件 辅助理解S STM32电机库5.4开源注释
  13. 从 Google play 商店直接下载 apk 安装包
  14. 大学计算机系最努力的同学都是如何学习的?
  15. MATLAB在主成分分析中的应用
  16. 【Linux】如何查看命令运行历史时间以及操作人IP
  17. el-upload 上传 照片墙上传照片,上传一张之后,上传框就消失
  18. 统计检验 单尾还是双尾
  19. centos 发送匿名邮件
  20. 无需密码自己卸载深信服EDR软件

热门文章

  1. pdf论文图中数据自动扫描,识别和获取
  2. 《现代操作系统(中文第四版)》笔记 第三章 内存管理
  3. 使用js将网页导出为图片并下载
  4. C++中inet_pton、inet_ntop函数
  5. java成绩管理系统论文总结_毕业论文基于java的学生成绩管理系统.doc
  6. java项目管理系统禅道下载,禅道专业版下载|禅道项目管理系统 V8.0 专业版 下载_当下软件园_软件下载...
  7. net开发android教程,Xamarin 开发Android应用简易教程(1)
  8. Quartus II三种方式实现D触发器及时序仿真
  9. 自然语言处理思维导图
  10. Top k问题(线性时间选择算法)