Android 7.1 App Shortcuts使用

如果你的安卓版本是25或者更高,你可以在你的app中通过定义快捷键方式来明确用户操作,形如:

此图来自android developers

我们可以看到,当长按app图标,会生成一个快捷操作列表,为用户提供快捷进入服务。

下面介绍一下ShortCuts如何创建。(静态创建以及动态创建)


一,静态创建ShortCuts

1: 在清单文件中(AndroidManifest.xml),找到启动的Acitivity,即intent filters设置的是android.intent.action.MAIN和android.intent.category.LAUNCHER

2: 在启动的Activity中添加元素,如下:

  <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/shortcuts" />
        activity>

3.创建新的资源文件:res/xml/shortcuts.xml.如下:


<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">

    <shortcut
        android:shortcutId="id2"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="@string/main_name"
        android:shortcutLongLabel="@string/main_name"
        android:shortcutDisabledMessage="@string/main_name">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.shortcutsandroid"
            android:targetClass="com.example.shortcutsandroid.MainActivity" />
        
        <categories android:name="android.shortcut.conversation" />
    shortcut>
    <shortcut
        android:shortcutId="id3"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="@string/second_name"
        android:shortcutLongLabel="@string/second_name"
        android:shortcutDisabledMessage="@string/second_name">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.shortcutsandroid"
            android:targetClass="com.example.shortcutsandroid.SecondActivity" />
        
        <categories android:name="android.shortcut.conversation" />
    shortcut>
shortcuts>

下面讲解一下shortcuts 里面各元素代表的含义

android:shortcutId:快捷方式ID,记住动态或者静态的ID都要不一样,否则对于重复ID只会显示一个

android:enabled:是否可点击,true会显示快捷方式,false则不显示快捷方式

android:icon:快捷方式图标

android:shortcutShortLabel:快捷方式短标签,限制在10个字符内

android:shortcutLongLabel:快捷方式长标签,限制在25个字符内

我们来看一下效果:

Shortcuts既可以提供快捷操作,也可以将快捷图标带入到桌面上


二,动态创建ShortCuts

1:在启动页面创建ShortcutManager对象,管理快捷方式列表

2:创建快捷方式对象ShortcutInfo

3:通过setDynamicShortcuts()或者addDynamicShortcuts(List)方法添加ShortcutInfo

代码如下:

   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) {
            ShortcutManager shortcutManager=getSystemService(ShortcutManager.class);
            ShortcutInfo shortcutInfo=new ShortcutInfo.Builder(this,"id1")
                    .setShortLabel("Web site")
                    .setLongLabel("Open this web site")
                    .setIcon(Icon.createWithResource(this,R.mipmap.ic_launcher))
                    .setIntents(new Intent[]{new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/"))})
                    .build();
            shortcutManager.addDynamicShortcuts(Arrays.asList(shortcutInfo));

        }

代码理解如上,不做详细介绍。

介绍一下动态的几个方法。

Publish(发布):setDynamicShortcuts()或者addDynamicShortcuts()

Update(更新):updateShortcuts()

Remove(移除):removeDynamicShortcuts()或removeAllDynamicShortcuts()

如果我通过Shortcuts进入一个页面,返回到主页面怎么操作呢?????

不要着急,看代码。

主要通过多Intent来解决这个问题。

动态通过setIntents,静态通过在一个shortcut下创建多个intent来实现。

例如:

shortcutInfo .setIntents(new Intent[]{new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/"))})

这样会打开网页界面,点击返回键返回到主页面。

另外还有一个限制,就是静态+动态创建的shortcuts不能超过5个,即小于等于4个,否则会报错。

代码地址传送门

https://github.com/wangchang163/ShortCutsAndroid

你可能感兴趣的:(Android,学习进阶)