xp框架下的Intent记录

描述

虽说这个话题发布在公众号上有些晚了, 很久之前我在其他平台上发过intent跳转的一些相关方法, 时至今日也不是完全不能用, 常规的APP还是免不了使用intent来跳转, 对于经常使用按键精灵写脚本的同学应该会很有帮助.

关于intent(意图)的理论上的东西. 我就不说了, 这个可以百度查一下Android的相关文档.里面讲的很详细了,今天只讲利用intent记录这个模块来抓到intent的相关参数,那对于这些参数要怎么处理才能转换成autojs或者按键上可使用的代码.

先来看一个简单的例子, 抖音的个人资料界面跳转,在intent记录里面拦截到的信息如下图

文档文档

看这两张图中的各个参数.

**from: **跳转的来源,一般是指上一个界面,不重要

**to: **跳转的目标界面, 也不重要

**action: **跳转的动作, 一般有 ACTION VIEW 等等, 重要程度一般

**clipData: **剪贴板数据, 此参数常用在分享文件的跳转中

**flags: **标志,常见的就是FLAG_ACTIVITY_NEW_TASK,不过在这里一般使用0x00000000类型的16进制来表示,具体的对应关系有兴趣的可以查查相关资料 重要程度一般

**dataString: **此参数一般会获得scheme的url连接, 不太重要, 如果该参数不为null的话, 还是得重点看看

**type: **类型, 几乎无用

**componentName: **跳转界面的className 非常重要

**scheme: **获取到scheme的信息. 不过几乎没见过他为非null的时候,即便是一个scheme跳转, 不重要

**package: **不重要

**requestCode: **不重要

**categories: **类型,这个在安卓手机中一般都是DEFAULT 默认的类型, 我把常用的类型.都放在下面的一个图里面,有兴趣的可以研究看看.

**intentExtras: 这个参数非常重要, **他携带的是intent跳转的关键参数.如果有的话, 如果跳转没有携带intent参数,那这里就会是空的没数据.

文档

那么以示例中的这个intent跳转为例来写一个autojs的跳转

//autojs code
app.startActivity({
    packageName : "com.ss.android.ugc.aweme",
    className : "com.ss.android.ugc.aweme.profile.ui.ProfileEditActivity",
    extras : {
        need_right_to_left_enter_anim : true,
        enter_from : "personal_homepage",
        enter_method : "click_button",
    },
    root : true
});

观察一下 extras中的内容, 它里面的参数对应的是图片中intentExtras的key和value, 但是还有class的参数, 这里的class很重要,他指定了value的数据类型, class中我们常用的只有少数的几个:

java.lang.Interger
java.lang.Lang
java.lang.Float
java.lang.String
java.lang.Boolean

前三种都可以当成数字即可, 如果class是String,就需要把value的内容放在"" 引号内,当做一个字符串, 如果是Boolean值, 那value就只有true或者false.没有特殊的情况 可跳转的activity中,autojs仅支持这几种数据类型的参数.其他情况就是app的自定义类型. 或者bundle数据了,bundle的数据需要使用安卓的方法跳转,autojs和shell就无法跳转了.对于非常规数据类型, 例如下面这种的数据:

文档

他的class显然不是常规的类型, 这种就是抖音内部的自定义类型的数据.

那么在shell环境中要怎么利用这些数据呢. 下面还是以示例图片中的数据来写成shell的调用方式:

am start -n com.ss.android.ugc.aweme/com.ss.android.ugc.aweme.notification.NotificationDetailActivity --ez need_right_to_left_enter_anim true --es enter_from personal_homepage --es enter_method click_button

shell命令会有点长, 还是拖动一下看看里面的内容, 如果你会写autojs的调用方式但不会shell,也没关系. autojs提供了一个转换的方法,

app.intentToShell(options);

这里的options是app.startActivity(//填写在这里的数据); 是一个对象.

var shell = app.intetnToShell({
    packageName : "com.ss.android.ugc.aweme",
    className : "com.ss.android.ugc.aweme.profile.ui.ProfileEditActivity",
    extras : {
        need_right_to_left_enter_anim : true,
        enter_from : "personal_homepage",
        enter_method : "click_button",
    }
});
log("am start " + shell);

执行一下上面的代码,就会得到一个shell命令,即可在按键中执行了.下面再简单讲一下 am start 的常用参数

am start 
-a [ACTION] 即为intent的ACTION
-d [DATA] intent的data
-t [MIME_TYPE] 文件的mime类型
-c [CATEGORY] 
-n [className]
-e [EXTRAS] 后面跟 key 和 value 如果你不知道类型就直接使用-e,如果清楚数据类型
            还是使用下面的参数.
--es 字符串类型的extras
--ez 布尔型的extras
--ei 整型的extras
--el 长整型的extras
--ef 浮点型的extras
上面这几种--ex的参数 后面都是跟一对 key value
这几种都是常用的参数.基本上90%的意图都只用这几个参数了.
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_36163286 2023-11-13
0 回复 举报
intent记录这个apk可以发一下吗 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分