浅谈Android的应用快捷方式App Shortcuts

本文介绍了Android中的应用快捷方式,包括静态、动态和固定快捷方式。静态快捷方式提供常规操作链接,动态快捷方式可随上下文变化,固定快捷方式在Android 8.0后引入,解决快捷方式数量限制问题。文章详细阐述了创建和管理这些快捷方式的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

想必用过IPhone手机的人肯定会对3D Touch功能赞不绝口。苹果公司在2015年的IPhone 6s上首次搭载了3D Touch功能。使用者不需要打开应用,只要在应用图标上用力按压,便可显示和使用该应用的核心功能。业内更是认为这个功能把手机原本只能在x轴和y轴上的交互,首次提升到了z轴,是手机交互的历史性变革。
在这里插入图片描述当然,安卓也不会甘于落后。谷歌公司于Android 7.1开始,加入了一个类似于3D Touch的功能——即App Shortcuts。翻译成中文,便是应用快捷方式。从名字就可以看出,谷歌并不希望把它做成类似安卓桌面控件的东西,而是要做成应用内功能在桌面上的延伸,再直白一点,就是应用内某个具体操作在桌面上的快捷方式。
在这里插入图片描述目前安卓一共提供了3种应用快捷方式,分别是从Android 7.1(API级别25)开始增加的静态快捷方式(Static shortcuts)和动态快捷方式(Dynamic shortcuts),以及从Android 8.0(API级别26)开始增加的固定快捷方式(Pinned shortcuts)。接下来我们具体讲一下这3种应用快捷方式。

静态快捷方式

静态快捷方式提供指向应用程序中常规操作的链接,这些操作需要与应用程序的生命周期保持一致。静态快捷方式的使用情景包括查看已发送的消息、设置一个闹钟和显示用户当天的运动情况。

静态快捷方式的创建:
1、在manifest.xml的应用入口Activity中添加以下标签;

<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/>

2、创建一个新的资源文件shortcuts.xml,并加入如下内容。

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <shortcut
    android:shortcutId="compose"	//快捷方式的ID
    android:enabled="true"	//是否启用快捷方式
    android:icon="@drawable/compose_icon"	//快捷方式图标
    android:shortcutShortLabel="@string/compose_shortcut_short_label1"	//快捷方式短名称
    android:shortcutLongLabel="@string/compose_shortcut_long_label1"	//快捷方式长名称
    android:shortcutDisabledMessage="@string/compose_disabled_message1">
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.example.myapplication"
      android:targetClass="com.example.myapplication.ComposeActivity" />	//快捷方式绑定的操作
    <!-- 在这里加入更多的intent标签 -->
    <categories android:name="android.shortcut.conversation" />
  </shortcut>
  <!-- 在这里加入更多的shortcuts标签 -->
</shortcuts>

动态快捷方式

动态快捷方式提供指向应用程序中特定的上下文相关操作的链接。这些操作可以在应用程序的使用之间更改,甚至在应用程序运行时也可以更改。动态快捷方式的使用情景包括打电话给指定人员、导航到指定位置以及从最近一个保存点加载游戏。

和静态快捷方式不同,动态快捷方式通过ShortcutManager提供的API进行管理。从而使动态快捷方式能根据用户的上下文操作来动态地改变内容。ShortcutManager具体提供了以下操作:

新建:通过setDynamicShortcuts()方法可以添加或替换所有的shortcut,通过addDynamicShortcuts() 方法把新的shortcut添加到列表中。

更新:通过updateShortcuts(List shortcutInfoList)方法来更新已有的动态快捷方式。

删除:通过removeDynamicShortcuts(List shortcutIds)方法来删除动态快捷方式,通过removeAllDynamicShortcuts()方法来删除所有的动态快捷方式。

动态快捷方式通过以下代码创建:

ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

ShortcutInfo shortcut = new ShortcutInfo.Builder(context, "id1")	//快捷方式的ID
    .setShortLabel("Website")	//快捷方式短名称
    .setLongLabel("Open the website")	//快捷方式长名称
    .setIcon(Icon.createWithResource(context, R.drawable.icon_website))	//快捷方式图标
    .setIntent(new Intent(Intent.ACTION_VIEW,
                   Uri.parse("https://www.mysite.example.com/")))	//快捷方式绑定的操作
    .build();

shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));

固定快捷方式

固定快捷方式是Android 8.0之后才有的,安卓开发文档里把静态快捷方式和动态快捷方式统称为App shortcuts,而把固定快捷方式分为另外一类。因为固定快捷方式的展现方式与App shortcuts完全不同,固定快捷方式在桌面上显示为单独的图标,点击图标就能触发相应的操作。
在这里插入图片描述固定快捷方式和动态快捷方式一样,通过ShortcutManager提供的API进行管理。固定快捷方式可以通过以下代码创建:

ShortcutManager shortcutManager =
        context.getSystemService(ShortcutManager.class);

if (shortcutManager.isRequestPinShortcutSupported()) {
    // 创建一个ID为“my-shortcut”的快捷方式
    // 该快捷方式必须为可用
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "my-shortcut").build();

    // 当创建固定快捷方式失败时,系统不会通知应用程序。这里我们用自己创建的createShortcutResultIntent()方法来返回消息
    Intent pinnedShortcutCallbackIntent =
            shortcutManager.createShortcutResultIntent(pinShortcutInfo);

    // 配置一个intent用来接受创建固定快捷方式成功的消息
    PendingIntent successCallback = PendingIntent.getBroadcast(context, /* requestCode */ 0,
            pinnedShortcutCallbackIntent, /* flags */ 0);

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


作为Android 8.0更新的内容,固定快捷方式完美解决了以往App shortcuts最多只能有5项的问题,赋予了开发者更多的可能性。Android从一开始的对3D Touch的拙劣模仿,到不断结合自身实际改进,最后推陈出新,甚至开始超越。而这也是我更加欣赏Android的原因。

原文作者:潘浩
原文链接:https://blog.csdn.net/panhaoo/article/details/106707160

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值