Android基础知识

Android-ShortCut

2020-12-23  本文已影响0人  有腹肌的豌豆Z

shortcuts的介绍

其中App Shortcuts是指在桌面长按app图标而出现的快捷方式, 可以为你的app的关键功能添加更快速的入口而不用先打开app,点击快捷方式可以访问应用功能, 并且这种快捷方式也可以被拖拽到桌面单独放置, 变成单独的桌面快捷方式.

有两种shortcuts:

数量

每一个应用目前最多可以有5个shortcuts(静态 + 动态)

运行条件

应用添加App Shortcuts是Android 7.1(API 25)的API, 所以只能在Android 7.1的设备上显示, 同时需要launcher支持, 比如Pixel launcher(Pixel设备的默认launcher), Now launcher(Nexus设备上的launcher)现在就支持, 其他launcher也可以提供支持.

静态的shortcuts的使用

清单文件配置

 <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!--添加支持shortcuts-->
            <meta-data
                android:name="android.app.shortcuts"
                android:resource="@xml/shortcuts" />
        </activity>

在res目录下添加xml文件夹,并新建文件shortcuts

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:icon="@drawable/add"
        android:shortcutId="add_website"
        android:shortcutLongLabel="@string/add_new_website"
        android:shortcutShortLabel="@string/add_new_website_short">
        <!--最左侧或者添加桌面后显示的图标-->
        <!--id标识-->
        <!--长按显示的文字-->
        <!--添加到桌面显示的文字-->
        <intent
            android:action="cn.yky.test.ADD_WEBSITE"
            android:targetClass="cn.yky.test.MainActivity"
            android:targetPackage="cn.yky.test" />
        <!--第一个是意图标识-->
        <!--第二个参数是希望打开的界面-->
        <!--希望打开界面的包名-->
    </shortcut>
</shortcuts>

1、enabled:表示当前快捷方式是否可使用
2、 icon: 快捷方式图标
3、 shortcutDisabledMessage: 快捷方式不可使用时显示的名字
4、 shortcutId:快捷方式标识
5、 shortcutLongLabel:长按下图标弹出来列表框中每个快捷名
6、 shortcutShortLabel:快捷是可以单独显示在桌面上的,显示名为shortcutShortLabel
7、 targetClass:点击快捷方式进入的Activity
8、categories 默认写死即可

注意,shortcutLongLabel和shortcutShortLabel,不可以直接引用文字,不然会报错.!!!谁加谁知道.经过以上的 步骤之后,就可以看到最开始的效果图了!.

动态添加

动态的shortcuts可以在用户使用app的过程中构建, 更新, 或者删除.

ShortcutManager

动态添加三个

 @RequiresApi(api = Build.VERSION_CODES.O)
    private void getNewShortcutInfo() {

        // 系统提供的
        ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);

        // 按下返回按钮跳转的activity
        Intent intent1 = new Intent(this, MainActivity.class);
        intent1.setAction(Intent.ACTION_VIEW);
        // 目标activity
        Intent intent2 = new Intent(this, PublishPostActivity.class);
        intent2.setAction("com.shark.xxx.BACK");
        Intent[] intents = new Intent[2];
        intents[0] = intent1;
        intents[1] = intent2;

        // 一个具体的快捷对象
        ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1") // id 标识是唯一的 
                .setShortLabel("Web site")  // 桌面快捷方式显示的名字
                .setLongLabel("第一个")      // 长按弹窗显示的名字
                .setIcon(Icon.createWithResource(this, R.mipmap.acc_circle))  // 显示的Icon
                .setIntents(intents) // 意图设置
                .build(); // 构建

        ShortcutInfo shortcut2 = new ShortcutInfo.Builder(this, "id2")
                .setShortLabel("Web site")
                .setLongLabel("第二个")
                .setIcon(Icon.createWithResource(this, R.mipmap.acc_circle))
                .setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.csdn.com/")))
                .build();

        ShortcutInfo shortcut3 = new ShortcutInfo.Builder(this, "id3")
                .setShortLabel("Web site")
                .setLongLabel("第三个")
                .setIcon(Icon.createWithResource(this, R.mipmap.acc_circle))
                .setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.github.com/")))
                .build();

        // 创建长按快捷键
        mShortcutManager.setDynamicShortcuts(Arrays.asList(shortcut, shortcut2, shortcut3));

        // 创建桌面快捷键
        PendingIntent successCallback = PendingIntent.getBroadcast(this, 0, mShortcutManager.createShortcutResultIntent(shortcut), 0);
        mShortcutManager.requestPinShortcut(shortcut,successCallback.getIntentSender());
    }

禁用删除

 /**
     * 动态删除
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    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();
    }
上一篇下一篇

猜你喜欢

热点阅读