博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android7.1Shortcuts
阅读量:6874 次
发布时间:2019-06-26

本文共 3229 字,大约阅读时间需要 10 分钟。

hot3.png

一些废话

Android7.1的Shortcuts也出来好久了,但是没有在自己的应用上尝试过,原因是之前手机一直是6.0的系统,直到最近才刷到了7.1.1,不过我发现,除了Google公司自己的app,适配了shortcuts功能的确实很少,可能是Android N的系统使用普及度太小,于是果断决定给我们公司的app加上shortcuts的功能,虽然是一些不起眼的功能,但至少要走在技术革新的最前沿吧。

shortcuts

使用及说明

关于Shortcuts的官方文档在这里

  • Shortcuts的作用:官方的说法,让用户在你的app上快速开始一个常用或者推荐的任务。

  • 使用条件:targetSdkVersion必须在25或者更高。

  • 类型:静态(xml方式)和动态(代码方式)

  • 注意事项:虽然其他app是不能在你app的shortcuts里访问元数据,但是启动器本身却可以访问这些数据。因此,我们应该在元数据中隐藏敏感的用户信息。

静态Shortcuts

之所以称为静态,是因为它是定义在资源文件中的,除非更新整个app,否则是不能更改shortcuts的东西,不过这种方式使用起来也跟简单,两步搞定。

第一步在AndroidManifest.xml中的启动activity中加上meta-data标签:其中name是固定的,resource是一个名为shortcuts.xml的资源文件。

第二步在res目录下新建xml资源目录,并在其下新建xml文件,命名随意。这里要吐槽下,在Android Studio里新建xm文件时,居然不能选择root-element是shortcuts的,还得自己手动去敲,气人。

输入图片说明

另外还要吐槽下官方文档,上面说一个app同时可以show五个shortcuts(不管是静态还是动态),但实际上最多只能显示4个,多出的不会显示出来。

shortcut标签下面的属性:

  • android:shortcutId必须唯一;
  • android:icon是该shortcut的图标;
  • android:enabled表示该shortcus是否可用,false表示禁用,是不会在shortcuts列表中显示出来的;
  • android:shortcutDisabledMessage表示当shortcut拖到手机桌面固定时,而enabled又是false禁用时点击桌面上的icon时提示给用户的文字,而且此时桌面上的icon会变灰色;
  • android:shortcutLongLabel是在shortcuts列表中该shortcut的名字;
  • android:shortcutShortLabel是拖动到桌面上显示的该shortcut的名字;
  • intent是点击shortcut时跳转到的app内的页面,其中action是必须的,而且是能是android.intent.action.VIEW

intent可以设置多个,相当于是按顺序将这些activity放入任务栈中,最后一个activity在栈顶,因此,点击shortcut时跳转的是最后一个intent指定的activity页面,当按返回键时,则会回退到上一个intent指定的activity。

shortcut标签也可以设置多个(最多4个),在xml中从上至下的顺序,最上面的离app在桌面的icon越近,越往下越远。

动态Shortcuts

动态即在app运行时执行发布更新和移除shortcuts等操作。

private void initShortcuts() {	if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {		return;	}	ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);	Intent mall = new Intent(Intent.ACTION_VIEW);	mall.setClass(this, MallServiceActivity.class);	mall.setPackage(BuildConfig.APPLICATION_ID);	ShortcutInfo mallShortcut = new ShortcutInfo.Builder(this, "mall")		.setShortLabel(getString(R.string.mall))		.setLongLabel(getString(R.string.mall))		.setDisabledMessage(getString(R.string.shortcutDisabledMessage))		.setIcon(Icon.createWithResource(this, R.drawable.icon1_chosen))		.setIntent(mall)		.build();	Intent ticket = new Intent(Intent.ACTION_VIEW);	ticket.setClass(this, OrderTicketDescActivity.class);	ticket.setPackage(BuildConfig.APPLICATION_ID);	ShortcutInfo ticketShortcut = new ShortcutInfo.Builder(this, "tuan")		.setShortLabel(getString(R.string.tuan))		.setLongLabel(getString(R.string.tuan))		.setDisabledMessage(getString(R.string.shortcutDisabledMessage))		.setIcon(Icon.createWithResource(this, R.drawable.icon3_chosen))		.setIntent(ticket)		.build();	shortcutManager.setDynamicShortcuts(Arrays.asList(mallShortcut, ticketShortcut));}

ShortcutInfo.Builder的第二个参数即shortcutId,不能重复,否则会覆盖。setDynamicShortcuts方法是设置一组shortcuts,addDynamicShortcuts则是在原来的基础上增加一组,updateShortcuts是更新一组,removeDynamicShortcuts删除一组,removeAllDynamicShortcuts删除所有。这些方法对shortcut操作时是根据其唯一的shortcutId来的,所以这玩意千万不能重复的。

另外ShortManager还有一个方法getPinnedShortcuts,作用是获取被拖动固定到桌面上的shortcuts,这些shortcuts是不能被在代码中被修改删除的,只能通过disableShortcuts方法禁用,禁用后icon会变灰色,并且点击时提示shortcutDisabledMessage。

当某个ShortcutInfo.Builder需要设置多个Intent时,可以使用setIntents方法来代替setIntent方法。

转载于:https://my.oschina.net/shenhuniurou/blog/877148

你可能感兴趣的文章
列表去除重复的值
查看>>
CCNP学习之路之VLAN Hopping
查看>>
CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*
查看>>
8.27(文件权限管理 正则表达式)
查看>>
用 zabbix 监测 snmptrap 的主动告警功能
查看>>
HDU1717 小数化分数2
查看>>
delphi 导入excel
查看>>
Linux下 FTP 常见错误 500 530等错误解决方法
查看>>
oracle asm
查看>>
VC基于单文档opengl框架
查看>>
MySQL-proxy 读写分离
查看>>
win7 下面操作memcache
查看>>
BZOJ1037:[ZJOI2008]生日聚会Party(DP)
查看>>
BZOJ3668:[NOI2014]起床困难综合症(贪心)
查看>>
openSUSE13.2安装ruby和rails
查看>>
南阳60(谁获得了最高奖学金)
查看>>
python 高级函数
查看>>
myeclipse从svn检出代码转成maven后格式有误解决方法
查看>>
F.Cards with Numbers
查看>>
Learn Python 004: string slicing
查看>>