说明:本文章的方法对于新快捷方式(Android 7.1 以后的 App Shortcuts / Pinned Shortcuts,如下图)并不适用,这类快捷方式需用此方法打开。
Intent 获取
创建桌面快捷方式
添加需要 Tasker 打开的快捷方式到桌面,如下图,微信公众号是「millies」,启动器为 Lawnchair
从数据库中获取桌面快捷方式 Intent
No Root 的获取方法
1 将启动器的数据库(DB)文件导出
- Nova: 如何导出 Nova 启动器的 DB 文件
- Lawnchair: 如何导出 Lawnchair 启动器的 DB 文件
- 其它启动器
其它启动器若没有提供导出数据库的功能,则可安装 Nova 或者 Lawnchair 启动器
2 通过数据库管理工具查询独立数据库
- SqlitePrime
SqlitePrime 从独立的数据库(DB)文件中获取桌面快捷方式的 Intent 参数
Rooted 的获取方法
1 通过数据库管理工具查询应用数据库
- SqlitePrime
SqlitePrime 从启动器应用中获取桌面快捷方式的 Intent 参数(Rooted)
按以上的方法,以下为从数据库中获取到的微信公众号的 Intent 参数
(不同微信用户,获取同个微信公众号快捷方式的 Intent 参数是不一样的,并不通用)
#Intent;action=com.tencent.mm.action.BIZSHORTCUT;launchFlags=0x4000000;package=com.tencent.mm;B.LauncherUI.From.Biz.Shortcut=true;S.app_shortcut_custom_id=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055;S.LauncherUI.Shortcut.Username=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055;end
* 注:若获取的 Intent 参数 category
部分含 com.android.launcher3.DEEP_SHORTCUT
值,那这种快捷方式叫做 Pinned Shortcuts,需改用此方法打开
桌面快捷方式的 Intent 参数获取后,那我们就可以开始分析它,然后在 Tasker 中正确设置 Intent
(如果不想分析,那么可以忽略「Intent 分析」,直接跳至下面「Intent 设置」的方式三)
Intent 分析
首先,将获取到的 Intent 参数按「;」分开
(1) #Intent;
(2) action=com.tencent.mm.action.BIZSHORTCUT;
(3) launchFlags=0x4000000;
(4) package=com.tencent.mm;
(5) B.LauncherUI.From.Biz.Shortcut=true;
(6) S.app_shortcut_custom_id=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055;
(7) S.LauncherUI.Shortcut.Username=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055;
(8) end
因为 Intent 的结构主要包含这几部分:
action, data, category, type (MIME type), component (package/class), extras
所以我们根据上面分开后的 Intent 参数,应该可以得到以下的对应关系
- action: com.tencent.mm.action.BIZSHORTCUT
很明显,Intent 的 action 值就是 (2) 中的 action
- data:
- category:
- MIME type:
在上面的 Intent 参数里,并没有与 data, category, MIME type 相关的参数值
- package: com.tencent.mm
- class:
component 一般是 包名/类名 的形式,(4) 中的 package 便是包名,而上面的 Intent 参数无类名
- extras:
B.LauncherUI.From.Biz.Shortcut=true
S.app_shortcut_custom_id=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055
S.LauncherUI.Shortcut.Username=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055
在 Intent 参数里,凡是形如 B.xxx / S.xxx / L.xxx 结构的参数名,这些都是属于 extras,如 (5)(6)(7)。
其中 B.xxx 的 B 代表 Boolean,而 S 代表 String,L 代表 Long
剩余的 (3) launchFlags=0x4000000 是启动标记,一般不用管;然后,(1)(8) 代表 Intent 参数的开头与结束,也不用管
经过一轮分析,接着我们要开始在 Tasker 中设置 Intent
Intent 设置
在这里,将分别用三种不同的方式,来实现打开桌面快捷方式的功能
方式一 Send Intent
Send Intent 打开微信公众号快捷方式
方式二 Java Function#new Intent
Java Function#new Intent 打开微信公众号快捷方式
方式三 Java Function#parseUri
Java Function#parseUri 打开微信公众号快捷方式
优缺点
- 平均执行用时:Java Function > Send Intent
- Java Function 比 Send Intent 更灵活,可设置更多的 Intent 参数
- 有些快捷方式使用 Send Intent 方式首次能正常打开,而再次执行时则无效(如支付宝扫一扫),Java Function 方式则不会
Intent 精简
精简的目的在于用尽可能少的 Intent 参数,达到与不精简时一样的打开效果
方法
基本采用逐个减少 extras 参数,然后测试的方法。若减少后可正常打开,那么可删除该 extra 参数;若减少后打开失败,那么要保留此 extra 参数。反复操作后,便可确认哪些 extras 参数是打开快捷方式所必须的
一般地,除了 extras 参数外,component 也可以精简
按照以上的方法操作后,最终精简出来的 Intent 参数就是这些
- action: com.tencent.mm.action.BIZSHORTCUT
- extras:
LauncherUI.From.Biz.Shortcut=true
LauncherUI.Shortcut.Username=shortcut_06c3b12f7fc3aa31c289c29467c391c2a5c28200c2b055
Intent 只需设置这些参数,便可正常打开微信公众号的快捷方式
参考资料
- Intent | Android Developers
Pandaria, XTasker, 打开微信特定联系人/公众号- wsbdzcyh, 百度贴吧, 关于发送意图(send intent)
更新日志
- 7/4/2018
- 添加打开 App Shortcuts / Pinned Shortcuts 的链接 - 12/21/2017
- 发布
其它
作者:sung
邮箱:sdfsung@gmail.com
原创内容,转载请注明出处