关键词:
转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/68962736
Shortcut概念
Shortcut 是Android-25(Android 7.1)新增的一项类似iOS的 3D Touch
功能的快捷方式组件,但是有着不同的表现形式,因为Android在硬件上不支持触摸压力感应,所以表现形式为长按,而iOS须用力长按。
首先,来个效果图
在 Launcher 或 应用程序列表 里面,长按应用图标,弹出一个快捷方式列表, 并且,可以把单个快捷方式拖动出来作为一个桌面图标,拖出来的图标会随着清除应用数据或卸载应用而消失,须重新创建。
具体实现
BuildConfig 配置
在主module下,修改 build.grade,使其使用 android-25 的 API 编译,当然,未下载的,就需要打开Android SDK Manager下载一下。
android
compileSdkVersion 25
buildToolsVersion "25.0.0" // 或以上
defaultConfig
targetSdkVersion 25
静态配置
类似BroadCastReceiver,Shortcut注册也分为静态注册和动态注册,首先介绍静态注册,动态注册后面继续~~
在
res/xml
文件夹底下创建一个xml,举个栗子:shortcut.xml<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@mipmap/ic_bar_detail_write" android:shortcutDisabledMessage="@string/shortcut_publish" android:shortcutId="publish" android:shortcutLongLabel="@string/shortcut_publish" android:shortcutShortLabel="@string/shortcut_publish"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.yanshi.writing.ui.bar.PublishPostActivity" android:targetPackage="com.yanshi.writing" /> <categories android:name="android.shortcut.conversation" /> </shortcut> <shortcut android:enabled="true" android:icon="@mipmap/logo" android:shortcutDisabledMessage="@string/shortcut_write" android:shortcutId="write" android:shortcutLongLabel="@string/shortcut_write" android:shortcutShortLabel="@string/shortcut_write"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.yanshi.writing.ui.write.WriteActivity" android:targetPackage="com.yanshi.writing" /> <categories android:name="android.shortcut.conversation" /> </shortcut> </shortcuts>
1、enabled:表示当前快捷方式是否可使用
2、 icon: 快捷方式图标
3、 shortcutDisabledMessage: 快捷方式不可使用时显示的名字
4、 shortcutId:快捷方式标识
5、 shortcutLongLabel:长按下图标弹出来列表框中每个快捷名
6、 shortcutShortLabel:快捷是可以单独显示在桌面上的,显示名为shortcutShortLabel
7、 targetClass:点击快捷方式进入的Activity
8、categories 默认写死即可清单文件注册
在 AndroidMainfest.xml 的默认启动页里添加meta-data
标签配置<activity android:name=".ui.MainActivity" android:configChanges="orientation|screenSize|keyboardHidden" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoneTranslucent"> <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/shortcut" /> </activity>
- 完毕! 可以到桌面查看效果了~~
动态配置
动态创建增加了菜单配置的灵活性,比如可以从服务端拉取快捷方式列表,再进行展示。具体配置方法如下:
创建
在需要注册的地方添加如下代码:
/**
* 动态创建
*/
public void register()
ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);
List<ShortcutInfo> infos = new ArrayList<>();
// 按下返回按钮跳转的activity
Intent intent1 = new Intent(this, MainActivity.class);
intent1.setAction(Intent.ACTION_VIEW);
// 目标activity
Intent intent2 = new Intent(this, PublishPostActivity.class);
intent2.setAction("com.yuyh.xxx.BACK");
Intent[] intents = new Intent[2];
intents[0] = intent1;
intents[1] = intent2;
ShortcutInfo info = new ShortcutInfo.Builder(this, "publish-2")
.setShortLabel("动态创建-发布帖子")
.setLongLabel("动态创建-发布帖子")
.setIcon(Icon.createWithResource(this, R.mipmap.ic_bar_detail_write))
.setIntents(intents)
.build();
infos.add(info);
mShortcutManager.setDynamicShortcuts(infos);
重新运行app,再次长按,效果如下:
删除或禁用
动态删除可以删除动态配置的快捷方式。
/**
* 动态删除
*/
public void delete()
ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);
/********* 移除弹出列表图标 **********/
// 所有动态创建图标
List<ShortcutInfo> infos1 = mShortcutManager.getDynamicShortcuts();
List<String> ids1 = new ArrayList<>();
for (ShortcutInfo info : infos1 )
ids1.add(info.getId());
// 禁用所有的快捷方式
mShortcutManager.disableShortcuts(ids1, "已禁用");
mShortcutManager.removeDynamicShortcuts(ids1);
/********* 移除拖出来的桌面快捷图标 **********/
// 放在桌面的图标
List<ShortcutInfo> infos2 = mShortcutManager.getPinnedShortcuts();
List<String> ids2 = new ArrayList<>();
for (ShortcutInfo info : infos2 )
ids2.add(info.getId());
mShortcutManager.disableShortcuts(ids2, "已禁用");
mShortcutManager.removeAllDynamicShortcuts();
代码比较简单,就不多做叙述了。 须注意一下 getPinnedShortcuts
方法与 getDynamicShortcuts
方法的区别! 禁用后的效果如图所示,图标变成灰色:
更新
快捷方式的唯一性,由前面提到的 shortcutId
这个标识符决定,所以更新快捷方式与创建快捷方式一样, shortcutId
如果相同, 则会覆盖之前创建的快捷方式!
返回栈问题
当通过快捷方式打开时,现有的Activity都会被销毁,然后重新创建一个Activity栈。因为清单方式设置的快捷键的Intent不能自定义Intent的Flag,其默认的Flag是 FLAG_ACTIVITY_NEW_TASK
和 FLAG_ACTIVITY_CLEAR_TASK
。
通过动态注册的方式,可发现,我们可以配置返回目标activity。当然,静态配置也可以实现,修改shortcut标签:
<shortcut
android:enabled="true"
android:icon="@mipmap/ic_bar_detail_write"
android:shortcutDisabledMessage="@string/shortcut_publish"
android:shortcutId="publish"
android:shortcutLongLabel="@string/shortcut_publish"
android:shortcutShortLabel="@string/shortcut_publish">
<!-- 返回目标activity -->
<intent
android:action="com.yuyh.xxx.BACK"
android:targetClass="com.yanshi.writing.ui.MainActivity"
android:targetPackage="com.yanshi.writing" />
<!-- 目标activity -->
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.yanshi.writing.ui.bar.PublishPostActivity"
android:targetPackage="com.yanshi.writing" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
感谢阅读!
3dtouch的简单使用
6s发布以后新增了一个3Dtouch功能,我个人觉得这个功能点在某些时候还是挺方便的,比如说微信的扫码功能.直接长按图标就可以进入这个功能里面,不用再打开app、一层层查找了,比较方便. 其实这个功能实现起来是比较简单的,... 查看详情
androidapp快捷方式之android版本的3dtouch(代码片段)
...p://afra55.github.io/2016/11/30/android-app-shortcut/简介Android版本的3DTOUCH。创建一个静态的快捷方式注:最多显示4个快捷方式,以静态的快捷方式优先。创建一个新的资源文件(res/xml/shortcuts.xml)。在shortcuts.xml文件中添加<shortcuts&g... 查看详情
android7.1.1系统,toast的exception:android.view.windowmanager$badtokenexception解决(代码片段)
7.1.1系统版本,我发现问题很多,比如有个接口字段用了base64,但是我添加包的时候用的java.util.base64结果会崩溃报错,网上搜索后要用android.util.base64来解决, 今天发现突然有崩溃,看了下崩溃信息Fatal... 查看详情
android7.1.1系统,toast的exception:android.view.windowmanager$badtokenexception解决(代码片段)
7.1.1系统版本,我发现问题很多,比如有个接口字段用了base64,但是我添加包的时候用的java.util.base64结果会崩溃报错,网上搜索后要用android.util.base64来解决, 今天发现突然有崩溃,看了下崩溃信息Fatal... 查看详情
3dtouch与todaywidgets(代码片段)
公司App添加了3DTouch的需求,这个需求不是我做的,做这个需求的同事最后拿出来分享了一波,我也想学一学这东西,毕竟自己也换了个支持3DTouch的iPhone,我让他把他分享的ppt给我,于是就有了这篇博文... 查看详情
android7.1.1系统,toast的exception:android.view.windowmanager$badtokenexception解决(代码片段)
7.1.1系统版本,我发现问题很多,比如有个接口字段用了base64,但是我添加包的时候用的java.util.base64结果会崩溃报错,网上搜索后要用android.util.base64来解决, 今天发现突然有崩溃,看了下崩溃信息Fatal... 查看详情
android7.1.1系统,toast的exception:android.view.windowmanager$badtokenexception解决(代码片段)
7.1.1系统版本,我发现问题很多,比如有个接口字段用了base64,但是我添加包的时候用的java.util.base64结果会崩溃报错,网上搜索后要用android.util.base64来解决, 今天发现突然有崩溃,看了下崩溃信息 Fatal... 查看详情
ios3dtouch(代码片段)
3DTouch介绍3DTouch的主要应用场景3DTouch的主要功能模块1HomeScreenQuickActions2peekandpop3ForcePropertiesHomeScreenQuickAction使用与相关api详解1静态标签2动态标签3响应标签的行为PeekandPopPeekandPopPreviewActionForceProperties附模拟器3DTouch测试方法3 查看详情
macossierra10.12.4编译android7.1.1源码必须跳的坑(代码片段)
简介下载Android7.1.1源码花费了两天,编译整个源码同样花费了2天,期间遇到无数个坑。现在编译源码,一旦中间遇到错误,则要重新开始。本文记录编译过程遇到的问题及解决方案,如有编译源码需求的可以... 查看详情
是时候来了解android7了:shortcuts(快捷方式)(代码片段)
...好Google并没有对这一干一亲区别对待,这不,今天就推送了android7.1.1的更新,随之而来的又是一大波新 查看详情
3dtouch与todaywidgets(代码片段)
公司App添加了3DTouch的需求,这个需求不是我做的,做这个需求的同事最后拿出来分享了一波,我也想学一学这东西,毕竟自己也换了个支持3DTouch的iPhone,我让他把他分享的ppt给我,于是就有了这篇博文... 查看详情
3dtouch的使用
废话不多说,直接上代码------------------在-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions;方法里面判断,该手机是否是9.0以上,因为3dtouch是9.0以后出的功能CGFloatcurrentDeviceV 查看详情
实现 UIApplicationShortcutItem
...我正在查看UIKit框架参考并遇到UIApplicationShortcutItem。用于3DTouch。它包含以下代码示例:letexistingShortcutItems=UIApplication.sharedApplica 查看详情
教你玩转iphone超实用的3dtouch功能!
...现在先给大家推荐一波三维触控的使用技巧!三维触控(3DTouch)仅iPhone6s或以上机型支持三维触控(3DTouch),开启功能:设置→通用→辅助功能→三维触控,然后设置好合适自己的灵敏度(按压力度) 快速切换后台应用用... 查看详情
还必须保留哪些android 7.0 sdk组件才能支持android 7.1.1
】还必须保留哪些android7.0sdk组件才能支持android7.1.1【英文标题】:Whichandroid7.0sdkcomponentsmuststillbekepttosupportandroid7.1.1【发布时间】:2017-07-2911:51:28【问题描述】:我尝试下载适用于android7.1.1的新系统映像组件时磁盘空间不足。我... 查看详情
代码简化之道--接口之从传统实现到lambda表达式实现(代码片段)
publicinterfaceAvoidaa();publicclassAlimpimplementsA@Overridepublicvoidaa()System.out.println("我是A的实现类中的方法");publicclassMainpublicstaticvoidmain(String...args)//传统的实现方法Aa=newAlimp(); 查看详情
android7.1.1系统设置默认值大全
1,是否有默认值在寻找一个开关的默认值时,首先要明白一点,该开关是否存在默认值,以及该开关状态是否有状态保存(一般状态存储在settings的db中)。判断条件:在reboot(重启)之后开关... 查看详情
3dtouch桌面快捷方式
3DTouch是iOS9,iPhone6s上新加的功能,之前只是一直有了解,但是由于设备的原因并没有很好的研究,后来购入一台6S所以就迫不及待的尝试了一下。申明QuickAction有两种方式:静态和动态,静态是在plist文件中申明... 查看详情