Tasker 打开桌面快捷方式(以微信公众号为例)[No Root]

说明:本文章的方法对于新快捷方式(Android 7.1 以后的 App Shortcuts / Pinned Shortcuts,如下图)并不适用,这类快捷方式需用此方法打开。

App Shortcuts 和 Pinned Shortcuts 的外观(来源:Android Developer)

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 只需设置这些参数,便可正常打开微信公众号的快捷方式

参考资料

  1. Intent | Android Developers
  2. Pandaria, XTasker, 打开微信特定联系人/公众号
  3. wsbdzcyh, 百度贴吧, 关于发送意图(send intent)

更新日志

  • 7/4/2018
    - 添加打开 App Shortcuts / Pinned Shortcuts 的链接
  • 12/21/2017
    - 发布

其它

作者:sung
邮箱:[email protected]

原创内容,转载请注明出处

你可能感兴趣的:(Tasker 打开桌面快捷方式(以微信公众号为例)[No Root])