美文网首页Tasker
Tasker 打开桌面快捷方式(以微信公众号为例)[No Roo

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

作者: blackspot | 来源:发表于2018-01-31 19:05 被阅读3352次

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

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

    Intent 获取

    创建桌面快捷方式

    添加需要 Tasker 打开的快捷方式到桌面,如下图,微信公众号是「millies」,启动器为 Lawnchair

    从数据库中获取桌面快捷方式 Intent

    No Root 的获取方法
    1 将启动器的数据库(DB)文件导出

    2 通过数据库管理工具查询独立数据库

    Rooted 的获取方法
    1 通过数据库管理工具查询应用数据库

    按以上的方法,以下为从数据库中获取到的微信公众号的 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
    邮箱:sdfsung@gmail.com

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

    相关文章

      网友评论

        本文标题:Tasker 打开桌面快捷方式(以微信公众号为例)[No Roo

        本文链接:https://www.haomeiwen.com/subject/nkgkzxtx.html