介绍

Shortcut 是谷歌在API25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按.
来看下效果吧:

是不是很赞? 那么请随本文一起学习吧

更新

  1. 新建项目 在你项目下的build.gradle下

    以下目的很简单更新你编译工具 和指定项目版本

    1. compileSdkVersion 25
    2. buildToolsVersion “25.0.0”
    3. minSdkVersion 25
    4. targetSdkVersion 25
  2. 更新platform-tools 到25
    打开SDK Manager

    如果你的Android SDK Platform-tools小于25那么请勾选然后点右下角更新

静态写法

静态写法?说白了和BroadcastReceiver(广播接受者)一样 .一个在清单文件中注册广播我们称为静态,用代码注册称为动态

  1. 在res创建xml文件夹

  2. 在res/xml下新建一个文件命名为my_shortcut.xml字符串貌似必须引用方法比如@string/xxxx
    具体内容

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"><shortcut
            android:shortcutId="settings"android:enabled="true"android:icon="@mipmap/ic_launcher"android:shortcutShortLabel="@string/my_short"android:shortcutLongLabel="@string/my_long"android:shortcutDisabledMessage="@string/my_disable"><intent
                android:action="android.intent.action.VIEW"android:targetPackage="com.example.administrator.myapplication"android:targetClass="com.example.administrator.myapplication.MainActivity" /><intent
                android:action="android.intent.action.VIEW"android:targetPackage="com.example.administrator.myapplication"android:targetClass="com.example.administrator.myapplication.SettingsActivity" /><categories android:name="android.shortcut.conversation"/></shortcut>
    </shortcuts>

    参数说明

    shortcut 属性说明:
    android:shortcutId 就是一个id标志 后面动态注册会讲到
    android:enabled 是否可用 如果不可用那么将不显示此快捷
    android:shortcutShortLabel 快捷短名:大家注意到一开始的效果图没?快捷是可以脱出来在变成一个桌面快捷方式图标.那么此图标的名字就是这个
    android:shortcutLongLabel :快捷长名 长按下图标弹出来列表框中每个快捷名
    android:shortcutDisabledMessage: 当快捷不可用时用户点击会提示此文字 后面动态会详细说明
    intent属性说明:

    假设1:shortcut (看清楚不是shorcuts 没有s哦)下只有一个intent 那么结果:用户点击此快捷用户跳转到intent制定的activity

    假设2:shortcut 下有两个intent 我们按照顺序命名为intent1intent2 那么用户点击快捷的时候将会跳转到intent2 此时 若用户按下back键(返回键) 那么将会跳转到intent1的界面

    categories 属性说明
    反正就一个值就是上面写的 写死即可

  3. 在清单文件注册
    注意一个小坑:注册信息必须要在activity为启动项的activity的根标签注册写下<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/my_shortcut"/></activity>

    做法如下:
    下面少打错了”android.app.shortcuts” 下面少打了个s (电脑实在太卡了,不想重录)注意!!!!!!!!

  4. 效果展示:

  5. 小知识点
    假如:你打开快捷item的程序所在的应用已经有多个activity在回退栈 请猜猜会怎么样?这里留给读者自行尝试..哪怕什么都没有反生你也可以增加记忆嘛

动态写法 -添加

特点和广播接受者一样灵活
核心代码(本例只要点击”创建”按钮会执行下面方法生成快捷):

 //动态添加public void onclick2(View view) {mShortcutManager = getSystemService(ShortcutManager.class);List<ShortcutInfo> infos = new ArrayList<>();//快捷最多只能有5个// getMaxShortcutCountPerActivity只能返回5for (int i = 0; i < mShortcutManager.getMaxShortcutCountPerActivity(); i++) {Intent intent = new Intent(this, SettingsActivity.class);intent.setAction(Intent.ACTION_VIEW);Intent intent2 = new Intent();intent2.setAction("fmy.fmy");intent2.setClassName(getPackageName(),getPackageName()+".MainActivity.java");Intent[] intents = new Intent[2];//开始点击快捷时跳进此 返回键跳入intent2 其他类似intents[0]=intent;intents[1]=intent2;//第一个参数 上下文//第二个参数id嘛            ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + i).setShortLabel("短的名字"+i+"").setLongLabel("长的名字:" + i+"").setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
//                   .setIntent(intent).setIntents(intents).build();infos.add(info);}mShortcutManager.setDynamicShortcuts(infos);}

效果:

解析:下图我一开始没有点击”创建”按钮 直接在桌面长按按钮发现没有任何反应.然后进入程序按下创建按钮并返回桌面发现可以长按点出快捷

注意和静态写法一起的坑(算本人经验吧):

那些年我们一起踩过的坑—>>上面的代码会动态创建5个快捷点击item.但是如果你此时静态写一个了快捷item那么恭喜你见红了(出现异常)

Caused by: java.lang.IllegalArgumentException: Max number of dynamic shortcuts exceeded

解决:先获取其已有的快捷item数量然后要么移除原来的,要么减少你创建.或者更新 这就是我为什么知道只能创建5个原因.解决方法读者看完 “动态写法-更新(覆盖)”和”动态写法-删除”自然会明白,如果想先解决问题那么请直接拷贝 更新 和 删除 中部分核心代码

动态写法 -更新(覆盖)

如果你想某些时候改变某些快捷item的名字或者意图(intent)那么请参照以下代码

 public void onclick3(View view) {Intent intent2 = new Intent();intent2.setAction("fmy.fmy");intent2.setClassName(getPackageName(),getPackageName()+".MainActivity.java");
//设置id为id1 会覆盖原来快捷item为id为id1的快捷
//如果没有则什么都不会发生ShortcutInfo info = new ShortcutInfo.Builder(this,"id1").setIntent(intent2).setLongLabel("动态更新的长名").setShortLabel("动态更新的短名").build();mShortcutManager = getSystemService(ShortcutManager.class);List<ShortcutInfo> dynamicShortcuts = mShortcutManager.getDynamicShortcuts();mShortcutManager.updateShortcuts(Arrays.asList(info));}

效果:

动态写法 -删除(不可用)

下面一小段描述转载的(我不想写,再说次作者写这个描述非常不错此段描述原作者地址)
我们先来介绍一个名词-Pinning Shortcuts, 这是个啥玩意呢? 其实对于Shortcut, Android是允许我们直接放到桌面的, 这样就更加方便了用户的操作, google把他称作为Pinning Shortcuts, 具体啥样, 我们来张图就明白了.

对于这个Pinning Shortcuts, google的文档说, 我们开发者是没有权利去删除的, 能删除它的只有用户. 那我该项功能删除了咋办? 这东西还在桌面上, 是不是APP要崩? 当然Google考虑到了这点, 它允许我们去disable这个shortcut. 让其变为灰色 用户点击时提示个小土司
好了引用结束 感谢原作者

我们在桌面长按拖出来的快捷item到桌面 这个item对象为ShortcutInfo
代码是最好的老师:

//删除public void onclick(View view) {mShortcutManager = getSystemService(ShortcutManager.class);//获取所有被拉取出来的快捷item(如果一个item都没有被拉出那么返回长度为0)List<ShortcutInfo> infos = mShortcutManager.getPinnedShortcuts();//遍历所有的被拉出的item 然后让其变成灰色不可点击for (ShortcutInfo info :infos ) {//此时被拉出的快捷item 变为灰色 用户再点击 会弹出吐司内容为第二个参数 "不可点击哦"// 此时桌面长按原程序图标弹出的快捷列表已经没有了mShortcutManager.disableShortcuts(Arrays.asList(info.getId()), "不可点击哦");List<ShortcutInfo> dynamicShortcuts = mShortcutManager.getDynamicShortcuts();Log.e("TAG","大小"+dynamicShortcuts.size());//虽然不可见但是你 依然要移除在动态添加列表里的东西 不过我调用disableShortcuts// 后发现其大小变了.内部应该调用此方法了.由于电脑太卡没下载源码 所以保险起见写上吧mShortcutManager.removeDynamicShortcuts(Arrays.asList(info.getId()));}List<ShortcutInfo> dynamicShortcuts = mShortcutManager.getDynamicShortcuts();Log.e("TAG","大小"+dynamicShortcuts.size());}

小知识点

  1. 用户删除数据时 被拖出来快捷item会被删除
  2. 用户删除数据时 动态创建的item 你在桌面在长按程序图标也没有 需要重新写入
  3. 用户卸载时被拖出来快捷item会被删除

关于这篇博文

我偶然看到这个7.1新特性 于是一直在找学习资料.然后想写下 期间看了几篇文章 并结合自己体会写下来.这篇博客用到模拟器要用SDK manager 下载镜像 因为只有它有7.1镜像 genymotion 最新的也就只有7.0 而已.运行谷歌自带镜像及其耗费内存 我就4G内存 开完stuio和博客和模拟器 内存只剩下80mb 卡的程度可想而知.但是一直想写一篇高质量的博文.于是硬着头皮卡了5个小时写下了.由于时间仓促错漏在所难免,由于卡到不行不敢点击源码去看 而且我也没下载.如果以上文字对你有那么一点带你帮助 将是我最大的欣慰;

转载于:https://www.cnblogs.com/muyuge/p/6152118.html

安卓7.1 新特性Shortcut相关推荐

  1. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

  2. android8.0的蓝牙版本,android o 新特性详解 安卓8.0蓝牙音频增强以及更加可爱的表情包...

    android 8.0什么时候推出?有哪些新特色?很多安卓用户非常想知道答案吧!不用着急,下面是大麦子小编整理出来的安卓8.0新特性详解,希望可以帮到大家. 有媒体近日曝光了有关谷歌Pixel XL ...

  3. Android5.x新特性之CardView立体卡片--阴影、圆角

    苹果追求的是扁平化,安卓追求的是层次,立体,阴影化 安卓5.X新特性里面就有一个CardView可以实现该效果 测试工具:Nexus5    开发工具Es   Sdk版本5.1.1 代码下载地址   ...

  4. 小米android11新特性,小米已推送安卓11测试版 目前支持三款机型

    原标题:小米已推送安卓11测试版 目前支持三款机型 在8月初,谷歌推送了安卓11 的Beta3版本,这意味着距离正式版就不远了.在近日,小米方面就已经开始推送了安卓11 稳定版的测试申请,目前仅支持到 ...

  5. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  6. 安卓9.0系统新特性

    安卓9.0系统新特性 新特性一: 日前针对Android系统特有的开放式特点,及其所带来的卡顿.运行不流畅问题,谷歌特意研制出最新版Android 9.0,以增强系统的封闭性.于是,网上曝出了很多安卓 ...

  7. Android L系统 剖析安卓5.0安卓L新特性

    Android L系统全新发布了!在Google I/O 2014上,Google正式发布了最新一代安卓系统Android L,安卓系统终于告别了安卓4.×,迈入了全新的版本周期.新一代安卓系统此前一 ...

  8. android l 新功能,Android L怎么样 安卓L新特性汇总

    在刚刚结束的2014谷歌IO大会上,谷歌共发布了8款新品,其中Android L成为发布会的一大看点.此次谷歌并没有将新安卓系统命名为Android 5.0,而是命名为Android L.仅从命名来看 ...

  9. (15.1.14)Google正式发布Android L系统 剖析安卓5.0安卓L新特性

    Material Design.卡片.环动式设计 ART.64位计算 升级.电池续航.安全 Android L系统全新发布了!在Google I/O 2014上,Google正式发布了最新一代安卓系统 ...

最新文章

  1. 两种写法的效果一样,那么到底哪一种更好呢?
  2. python long_python long函数是什么?如何使用?
  3. LeetCode 2177. 找到和为给定整数的三个连续整数
  4. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(上)
  5. py第五天,列表的练习,每日菜谱
  6. 数据结构与算法之-----图(基本概念)
  7. 常见移动机器人轮直径校准
  8. 基础数据类型{dict:'字典'}
  9. excel柱状图自定x轴y轴_Excel制作双坐标轴图表与把X轴与Y轴改为月份及使坐标轴带方向...
  10. 如果你的 pip 命令不能用,你可以这样解决
  11. 【工作规划】未来自我学习计划及发展注意事项
  12. Java数字图像处理基础-------Java Swing简单使用,图形绘画---画五角星
  13. QCC512x QCC302x 延时函数 (阻塞与非阻塞)
  14. 比 Redis 还快,更省内存,开源,惊爆了!
  15. dg是什么意思(dg是什么意思网络用语)
  16. 分享15个英文SEO长尾关键词挖掘分析工具
  17. 20220221量化打板模型预测
  18. windows下安装PGSQL14
  19. 北科大计算机与通信工程博士,2015年北科大计算机与通信工程学院考研拟录取名单...
  20. FQ队列detached流管理

热门文章

  1. 荣品-i.MX6Q开发板 飞思卡尔iMX6Q开发板 工业级开发板
  2. 我的世界java手机版怎么调按键_《我的世界》按键设置 pc版快捷按键代码大全...
  3. AutoCAD .NET: 遍历模型空间
  4. java 生成 checksum
  5. 软件测试项目管理平台
  6. 微软开源!世界首个AI量化投资平台 Qlib 基本使用教程
  7. 【学习笔记】OFDM中信道估计技术分析与实现
  8. 怎么html让元素脱离文档流,子元素设置绝对定位之后脱离文档流!
  9. c语言中数组部分输入赋值,c语言scanf对数组赋值
  10. 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发