返回

如何优化共享界面:隐藏应用快捷方式,展示推荐快捷方式

Android

优化共享界面:在隐藏应用快捷方式的同时显示推荐的快捷方式

前言

在开发聊天应用程序时,我们希望在操作系统共享界面中显示推荐的接收者,让用户能够方便地与特定应用程序用户分享文件。然而,我们不想让这些用户在桌面应用程序菜单中看到这些接收者(长按应用程序图标时)。

实现

步骤 1:配置元数据

在应用程序清单文件中添加元数据,指定共享目标服务和快捷方式文件:

<meta-data android:name="android.service.chooser.chooser_target_service" android:resource="androidx.sharetarget.ChooserTargetServiceCompat" />
<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />

步骤 2:创建快捷方式文件

创建 shortcuts.xml 文件并定义共享目标,包括类、MIME 类型和类别:

<share-target android:targetClass="sample.app.MainActivity">
    <data android:mimeType="*/*" />
    <category android:name="sample.app.category.TEXT_SHARE_TARGET" />
</share-target>

步骤 3:设置动态快捷方式

使用 ShortcutManagerCompat 设置动态快捷方式,包括标签、图标和类别:

var shortcutInfo = new ShortcutInfoCompat.Builder(MainActivity.Instance, conversationID)
    // 设置快捷方式信息
    .setCategories(new[] { "sample.app.category.TEXT_SHARE_TARGET" })
    .addCapabilityBinding("actions.intent.SEND_MESSAGE")
    .build();
shortcutList.add(shortcutInfo);
ShortcutManagerCompat.setDynamicShortcuts(MainActivity.Instance, shortcutList);

步骤 4:限制快捷方式可见性

使用 addCapabilityBinding 方法,为快捷方式设置 capability 绑定,从而限制其仅在共享界面中显示:

.addCapabilityBinding("actions.intent.SEND_MESSAGE")

总结

通过结合元数据、快捷方式文件和动态快捷方式,我们可以在共享界面中显示推荐的快捷方式,同时将它们隐藏在应用程序菜单中。这为用户提供了更好的体验,让他们可以轻松地分享内容,而不会被不必要的快捷方式打扰。

常见问题解答

1. 为什么我们需要设置共享目标服务?

共享目标服务负责处理与共享相关的 Intent,并确定应用程序是否支持所共享的数据类型。

2. 如何确定快捷方式应该附加到哪个类别?

类别由开发者定义,用于对快捷方式进行分组。在我们的例子中,我们创建了一个名为 "sample.app.category.TEXT_SHARE_TARGET" 的类别,以将所有用于共享文本的快捷方式组合在一起。

3. 动态快捷方式和普通快捷方式有什么区别?

动态快捷方式在运行时创建,并且可以随时更新,而普通快捷方式则在编译时创建并存储在清单文件中。

4. 如何使用 capability 绑定来限制快捷方式的可见性?

capability 绑定将快捷方式与特定的功能相关联。在这种情况下,我们使用 "actions.intent.SEND_MESSAGE" capability 绑定,因为我们的共享目标用于发送消息。

5. 在应用程序卸载后,动态快捷方式会发生什么?

动态快捷方式会与应用程序一起卸载。