You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取特定应用的可用App Shortcuts?能否基于其创建Pinned Shortcut?

获取其他应用的App Shortcuts列表并创建Pinned Shortcut

嗨,作为启动器开发者,你遇到的这个反向获取App Shortcuts的问题确实比较冷门——官方文档大多聚焦在应用如何提供快捷方式,很少提及启动器的接收逻辑。我来一步步帮你解决:

一、获取指定应用的全部App Shortcuts列表

要拿到其他应用的快捷方式,核心要用到LauncherApps类(API 25+引入),这是系统专门给启动器类应用开放的服务,用于访问第三方应用的快捷方式、应用元数据等。

1. 权限准备

  • API 33及以上:如果要获取所有应用的快捷方式,需在Manifest中声明android.permission.QUERY_ALL_PACKAGES;如果只针对特定包,更安全的做法是声明android.permission.QUERY_PACKAGE_CONTENTS并指定目标包名。
  • 启动器应用还需声明android.permission.BIND_APP_LAUNCHER,确保系统识别你的应用为合法启动器。

2. 代码实现

// 获取LauncherApps系统服务实例
LauncherApps launcherApps = context.getSystemService(LauncherApps.class);

// 构建快捷方式查询条件
ShortcutQuery query = new ShortcutQuery();
query.setPackageName("com.target.app.package"); // 替换为目标应用的包名
// 匹配所有类型的快捷方式:动态生成、Manifest静态定义、已固定到桌面的
query.setQueryFlags(ShortcutQuery.FLAG_MATCH_DYNAMIC 
                    | ShortcutQuery.FLAG_MATCH_MANIFEST 
                    | ShortcutQuery.FLAG_MATCH_PINNED);

// 执行查询,拿到快捷方式列表
List<LauncherApps.ShortcutInfo> shortcutList = launcherApps.getShortcuts(query, null);

// 遍历处理每个快捷方式信息
for (LauncherApps.ShortcutInfo info : shortcutList) {
    String shortcutId = info.getId();
    CharSequence shortLabel = info.getShortLabel();
    Intent launchIntent = info.getIntent();
    // 还可以获取长标签、图标资源、是否允许固定等信息
}

⚠️ 注意:如果目标应用没有对外暴露任何快捷方式,返回的列表会是空的;部分应用可能限制只有默认启动器才能获取它们的快捷方式,此时需要确保你的应用是系统默认启动器。

二、基于获取到的快捷方式创建Pinned Shortcut

拿到LauncherApps.ShortcutInfo后,你可以通过ShortcutManager(或Jetpack的ShortcutManagerCompat做兼容)请求将快捷方式固定到桌面。

代码实现

// 获取ShortcutManager实例
ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class);

// 从获取到的快捷方式信息构建可固定的ShortcutInfoCompat
LauncherApps.ShortcutInfo sourceShortcut = ...; // 之前查询到的目标快捷方式
ShortcutInfoCompat pinnedShortcut = new ShortcutInfoCompat.Builder(context, sourceShortcut.getId())
        .setShortLabel(sourceShortcut.getShortLabel())
        .setLongLabel(sourceShortcut.getLongLabel())
        .setIntent(sourceShortcut.getIntent())
        .setIcon(IconCompat.createWithResource(context, R.drawable.your_custom_icon)) // 也可以复用原快捷方式的图标
        .build();

// 请求固定快捷方式,系统会弹出用户确认对话框
ShortcutManagerCompat.requestPinShortcut(context, pinnedShortcut, null);

注意事项

  • 固定操作必须经过用户确认,系统会自动弹出确认对话框,无法静默完成。
  • API 26及以上无需声明INSTALL_SHORTCUT权限,直接调用requestPinShortcut即可。

额外提示

  • 测试时建议选择明确支持App Shortcuts的应用(比如微信、Google Maps),避免因目标应用无快捷方式导致测试失败。
  • Kotlin版本的代码逻辑和Java一致,仅需调整语法细节即可。

内容的提问来源于stack exchange,提问作者android developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:26:04