美文网首页
Android 8.0+(二) 应用快捷方式 Shortcut

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

作者: 说点儿什么吧 | 来源:发表于2019-07-20 16:37 被阅读0次

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

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

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

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

     <activity
                android:name=".activity.MainActivity"
                android:configChanges="orientation|screenSize"
                android:launchMode="singleTop"
                android:theme="@style/SplashTheme">
                <intent-filter>
                    <category android:name="android.intent.category.LAUNCHER" />
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
    
                <!--创建静态快捷方式-->
                <meta-data
                    android:name="android.app.shortcuts"
                    android:resource="@xml/shortcuts" />
       </activity>
    

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

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
        <shortcut
            android:enabled="true"
            android:icon="@drawable/ic_vector_basic_info_24dp"
            android:shortcutId="个人中心"
            android:shortcutShortLabel="@string/basic_info">
            <intent
                android:action="android.intent.action.VIEW"
                android:targetClass="com.sxt.chat.activity.BasicInfoActivity"
                android:targetPackage="com.sxt.chat" />
            <categories android:name="android.shortcut.conversation" />
        </shortcut>
    </shortcuts>
    

    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

          本文链接:https://www.haomeiwen.com/subject/zusulctx.html