Android 8.0+(二) 应用快捷方式 Shortcut

相比ios系统,Android的可定制性还是蛮高的,例如通知栏,ios的通知栏也是最近的几个版本中才加了一些折叠的效果,一键清除等功能,但是通知栏的高度定制在Android系统中早已经司空见惯了,今天的主题不是通知栏,而是app的快捷方式,ios和android都可以创建快捷方式,但这里要向ios学习下了,在ios中默认为每一个app添加了一个 分享 的快捷方式,尤其是在3D Touch的加持下,快捷方式的可玩性更高

之所以叫快捷方式,是因为用户可以在不打开app的情况下,长按app启动图标,快速打开指定的页面,非常直接的一种方式,节省了一些不必要的操作,在Android中创建快捷方式有三种方式 静态快捷方式,动态快捷方式,固定快捷方式

不幸的是,这几种方式都需要在Android api 25 + ,只能呵呵了,不过还是值得操作一通的,毕竟功能还是很实用的,注意,虽然可以添加多个快捷方式,但是静态+动态快捷方式最多只能在app启动图标上面显示四个快捷方式

静态快捷方式,需要在清单文件中声明,注意,是在程序的入口Main里设置

 
            
                
                
                
            

            
            
   

另外需要创建一个新的资源文件:res/xml-v25/shortcuts.xml。这个是要显示的快捷方式布局


    
        
        
    

shortcuts节点下可以包含多个shortcut ,但是最多显示4个,shortcut中必要的字段有两个shortcutId shortcutShortLabel
enabled:属性可以控制该快捷方式是否显示 。
icon:属性是该快捷方式的drawable资源
shortcutId:属性是该快捷方式的id
,只能是字符串,不能是字符串的资源id。

shortcutShortLabel:属性是该快捷方式的描述信息,只能是字符串的资源id。
shortcutLongLabel:属性是描述快捷方式扩展信息,同样也只能是字符串的资源id。如果有足够的空间,启动器会显示此值而不是shortcutShortLabel。如果可能,将快捷方式的“长描述”的长度限制为25个字符。
然后就是配置Intent信息,我们这里是要打开某一个activity,所以配置为具体的类名和包名

运行app看下效果

静态快捷方式是只会创建一次,由于是固定在xml文件中,所以无法动态更新,只能通过版本更新apk的方式实现shortcut的更新
动态快捷方式相对来说比较灵活,可以随时更新之前创建好的shortcut

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
            ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
            ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "动态创建的快捷方式")
                    .setShortLabel("动态创建的shortcut")
                    .setLongLabel("动态创建的shortcut-打开网页")
                    .setIcon(Icon.createWithResource(this, R.drawable.ic_ar_photo_main_blue_24dp))
                    .setIntent(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://blog.csdn.net/sxt_zls")))
                    .build();

            shortcutManager.setDynamicShortcuts(Collections.singletonList(shortcut));
        }

ShortcutInfo可以通过ShortcutInfo.Builder通过链式设置不同的属性值,与静态创建的方式属性一致,这里的Intent可以设置为任意你想要的意图,我这里设置的打开一个网页,最后shortcutManager.setDynamicShortcuts实现快捷方式的创建,后续可以调用updateShortcuts方法来修改快捷方式

可以看到,长按app启动图标,出现了我们刚刚设置的快捷方式,点击后打开了指定的网页
相比静态和动态创建的方式来说,固定快捷方式比较麻烦,因为通过固定的方式创建的shortcut会固定在手机主页上面,所以需要用户授权才能创建,当然,用户可以选择拒绝,拒绝后将无法创建该快捷方式,看下交互效果会更容易理解

下图是通过动态的方式打开activity,然后申请添加快捷方式,选择自动添加或者拖动图标到主页即可添加成功

最后看下代码的实现,与动态注册类似,只不过需要设置创建之后的回调

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
            if (shortcutManager.isRequestPinShortcutSupported()) {
                Intent intent=new Intent(Intent.ACTION_VIEW,null, this, VR360Activity.class);
                ShortcutInfo pinShortcutInfo =
                        new ShortcutInfo.Builder(this, "固定的快捷方式")
                                .setShortLabel("固定的快捷方式")
                                .setIcon(Icon.createWithResource(this, R.drawable.ic_ar_photo_main_blue_24dp))
                                .setIntent(intent)
                                .build();

                Intent pinnedShortcutCallbackIntent =
                        shortcutManager.createShortcutResultIntent(pinShortcutInfo);

                //配置意图,以便应用程序的广播接收器回调成功的广播。               
                PendingIntent successCallback = PendingIntent.getBroadcast(this,  0,
                        pinnedShortcutCallbackIntent, 0);

                shortcutManager.requestPinShortcut(pinShortcutInfo,
                        successCallback.getIntentSender());
            }
        }

需要注意的是,并不是所有8.0以上的设备都支持固定模式的快捷方式,这里需要通过isRequestPinShortcutSupported()方法来进行判断目标设备是否支持该功能

你可能感兴趣的:(Android 8.0+(二) 应用快捷方式 Shortcut)