Shortcuts(快捷方式) Android7

Shortcuts(快捷方式) Android7

今天无意卸载应用:什么值得买、的时候发现这个功能,才知道是Shortcuts,然后看了手机中的app,QQ、QQ浏览器、网易云、高德地图、知乎、bibi时,发现这个功能

Shortcuts(快捷方式) Android7

Shortcuts的介绍

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

有两种shortcuts:

静态的: 在xml中定义,适用于一些通用的动作.
动态的: 由ShortcutManager发布, 可以根据用户的行为或者偏好添加, 可以动态更新.

数量

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

运行条件

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

静态的shortcuts的使用

什么是Static Shortcuts? 我的理解就是利用xml写死的配置。想想BroadcastReceiver可以静态注册也可以利用java代码动态注册,这里也是一样的。 
那静态注册该如何做呢? 首先, 我们需要在res/xml目录下创建一个新的xml文件, 这里我们命名为shortcuts.xml

Shortcuts(快捷方式) Android7

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:enabled="true"
        android:icon="@drawable/got"
        android:shortcutDisabledMessage="@string/settings_disable_msg"
        android:shortcutId="settings"
        android:shortcutLongLabel="@string/settings_long_name"
        android:shortcutShortLabel="@string/settings_short_name">

<!--注意,shortcutLongLabel和shortcutShortLabel,不可以直接引用文字,不然会报错-->

        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.ranran.myapplication.Main2Activity"
            android:targetPackage="com.ranran.myapplication" />
        <categories android:name="android.shortcut.conversation" />
    </shortcut>
</shortcuts>

首先一个shortcuts标签, 然后是一个shortcut, 到这里我们大概可以猜测到这里可以注册多个shortcut, shortcut标签有很多属性, 我们来一个个的了解下.

  1. shortcutId, 不用多说, 这肯定是一个唯一的id
  2. enabled, 表示这个shortcut是否可用
  3. shortcutShortLabel, 这里是配置的短名称, 下面还会有长名称, 如果长名称显示不下, 就显示短名称
  4. shortcutLongLabel, 这里是配置的长名称, launcher会优先选择长名称显示
  5. shortcutDisabledMessage, 这个配置是在我们选择一个不可用的shortcut时给用户的一个提示

在shortcut标签下还有两个我们熟悉的标签.

intent, 这里表示我们点击shortcut时要干嘛, t

argetPackage是指定一个目标应用的包名, targetClass是我们要跳转的目标类, 这里要注意的是android:action一定要配置, 否则会崩溃
categories, 这个东西目前位置官方只给提供了android.shortcut.conversation

注意,shortcutLongLabel和shortcutShortLabel,不可以直接引用文字,不然会报错.!!!

ok, 上面的几行代码, 我们一个static shortcuts就完成了, 那如何使用呢? 是在manifest中配置activity的地方使用, 而且这个activity是有要求的. 
能配置shortcuts的activity必须要有action是android.intent.action.MAIN和category是android.intent.category.LAUNCHER

也就是说shortcuts引用在主界面 至于为什么要有这个要求, 自己去体会……

        <activity android:name=".shortcutsdynamic.MainAShortctivity" >
            <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>
        <activity android:name=".shortcutsdynamic.MessageActivity" />

Shortcuts(快捷方式) Android7

到这里, 静态配置shortcuts我们就学习完了, 是不是很简单? 那这个静态配置是用在什么地方呢? 我想了想, 这里适用的场景一般是一些固定不变的功能, 例如你APP的设置界面, 如果是一些动态的数据, 那静态配置就不适合了, 就需要我们接下来要介绍到了动态配置了。

使用Dynamic Shortcuts(动态)

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

ShortcutManager

  • 设置或者新增 setDynamicShortcuts; addDynamicShortcuts;
  • 修改 updateShortcuts;
  • 删除 removeDynamicShortcuts; removeAllDynamicShortcuts;

动态添加三个

    /**
     * 动态添加三个
     */
    @RequiresApi(api = Build.VERSION_CODES.N_MR1)
    private void getNewShortcutInfo() {
        ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1")
                .setShortLabel("Web site")
                .setLongLabel("第一个")
                .setIcon(Icon.createWithResource(this, R.drawable.player))
                .setIntent(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("https://www.baidu.com/")))
                .build();
        ShortcutInfo shortcut2 = new ShortcutInfo.Builder(this, "id2")
                .setShortLabel("Web site")
                .setLongLabel("我的Github")
                .setIcon(Icon.createWithResource(this, R.drawable.player))
                .setIntent(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("https://github.com/growuptang")))
                .build();
        ShortcutInfo shortcut3 = new ShortcutInfo.Builder(this, "id3")
                .setShortLabel("Web site")
                .setLongLabel("我的CSDN")
                .setIcon(Icon.createWithResource(this, R.drawable.player))
                .setIntent(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("https://blog.csdn.net/qq_33721320")))
                .build();
        mShortcutManager.setDynamicShortcuts(Arrays.asList(shortcut, shortcut2, shortcut3));
    }

在onCreate中调用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
            mShortcutManager = getSystemService(ShortcutManager.class);
            getNewShortcutInfo();
        }

效果如下

Shortcuts(快捷方式) Android7

 

书到用时方恨少,纸上得来终觉浅。祝君好运!

参考链接

  1. 「捷徑」Shortcuts App
  2. [桌面] 来聊聊桌面Shortcuts应用快捷功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115013.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 直流电压前馈控制数字逆变电源设计与实现

    直流电压前馈控制数字逆变电源设计与实现引言逆变电源一般采用瞬时反馈控制技术来提高逆变电源的动态响应速度,减少输出电压的谐波含量,改善输出电压波形的质量。常见的逆变电源控制技术,有重复控制、谐波补偿控制、无差拍控制、电压瞬时值控制和带电流内环的电压瞬时值控制等类型[1~4]。其中,带电流内环电压瞬时值环路的双环控制方法因实现简单,系统动态性能优越和对负载的适应性强等优点,而逐渐成为高性能逆变电源的发展方向之一[4]。但传统控制方法是基于逆变电源直流侧输入电压为无脉动直流电压的假定,而实际逆变电源,存在因电网电压波动或负载突变而导致直流侧电压波

    2022年6月11日
    34
  • 怎么修改Ubuntu更新源服务器为国内地址

    怎么修改Ubuntu更新源服务器为国内地址 Ubuntu系统安装完默认更新源是国外服务器,总所周知的原因我天朝连接外国的速度那是很有讲究的,如果偶尔用用Ubuntu也就无所谓了,但是经常使用肯定会让你崩溃的,国内国外速度相差十倍都不止。更新源地址也很简单,有两种方法,一种是如果安装了图形界面,通过配置中心来更改是很方便的;还有一种就是纯服务器版,没有图形界面通过更改配置文件来更换源地址,并且命令行的方法可以随意添加任何可用的更新源地址,…

    2022年5月14日
    50
  • hackbar2.2.9在Firefox中的安装

    hackbar2.2.9在Firefox中的安装转载出处:https://www.ddosi.com/b320/尊重原创,以及知识产权,首先声明这是上面链接中大神的辛苦劳动成果,因为不知道如果联系所以这篇转载可能会有侵权问题,希望查看此链接的爱好者直接点击上面的链接查看,这篇仅是个人学习转载。前言众所周知,Firefox的插件必须经过签名,才能加载到浏览器中.因此,对于hackbar的破解,要么是装2.1.3这个没有激活的老版本,要么是直接安装hackbar的替代品,如Machackbar……其实对于h.

    2022年5月15日
    76
  • java中switch的用法和逻辑运算符[通俗易懂]

    java中switch的用法和逻辑运算符[通俗易懂]一、switch的用法常见用法如下:importjava.util.Scanner;publicclassA{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intscore=sc.nextInt();if(score>100&&score<0){Syst

    2022年7月7日
    20
  • ”在禁用UAC时,无法激活此应用“问题

    ”在禁用UAC时,无法激活此应用“问题”在禁用UAC时,无法激活此应用“问题

    2022年4月24日
    159
  • SPPnet 笔记

    SPPnet 笔记ECCV2014的文章,后来又扩展成了TPAMI整体的先后次序:RCNN(CVPR2014)->SPPnet(ECCV2014)->FastRCNN(ICCV2015)->FasterRCNN(NIPS2015)现有的深度卷积网络需要固定大小的输入图片(比如224×224224\times224224×224),这个要求人工设计的痕迹过于明显,并且可能会降低一…

    2022年5月4日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号