雖說這個話題發(fā)布在公眾號上有些晚了, 很久之前我在其他平臺上發(fā)過intent跳轉(zhuǎn)的一些相關(guān)方法, 時至今日也不是完全不能用, 常規(guī)的APP還是免不了使用intent來跳轉(zhuǎn), 對于經(jīng)常使用按鍵精靈寫腳本的同學(xué)應(yīng)該會很有幫助.
關(guān)于intent(意圖)的理論上的東西. 我就不說了, 這個可以百度查一下Android的相關(guān)文檔.里面講的很詳細(xì)了,今天只講利用intent記錄這個模塊來抓到intent的相關(guān)參數(shù),那對于這些參數(shù)要怎么處理才能轉(zhuǎn)換成autojs或者按鍵上可使用的代碼.
先來看一個簡單的例子, 抖音的個人資料界面跳轉(zhuǎn),在intent記錄里面攔截到的信息如下圖
看這兩張圖中的各個參數(shù).
**from: **跳轉(zhuǎn)的來源,一般是指上一個界面,不重要
**to: **跳轉(zhuǎn)的目標(biāo)界面, 也不重要
**action: **跳轉(zhuǎn)的動作, 一般有 ACTION VIEW 等等, 重要程度一般
**clipData: **剪貼板數(shù)據(jù), 此參數(shù)常用在分享文件的跳轉(zhuǎn)中
**flags: **標(biāo)志,常見的就是FLAG_ACTIVITY_NEW_TASK,不過在這里一般使用0x00000000類型的16進制來表示,具體的對應(yīng)關(guān)系有興趣的可以查查相關(guān)資料 重要程度一般
**dataString: **此參數(shù)一般會獲得scheme的url連接, 不太重要, 如果該參數(shù)不為null的話, 還是得重點看看
**type: **類型, 幾乎無用
**componentName: **跳轉(zhuǎn)界面的className 非常重要
**scheme: **獲取到scheme的信息. 不過幾乎沒見過他為非null的時候,即便是一個scheme跳轉(zhuǎn), 不重要
**package: **不重要
**requestCode: **不重要
**categories: **類型,這個在安卓手機中一般都是DEFAULT 默認(rèn)的類型, 我把常用的類型.都放在下面的一個圖里面,有興趣的可以研究看看.
**intentExtras: 這個參數(shù)非常重要, **他攜帶的是intent跳轉(zhuǎn)的關(guān)鍵參數(shù).如果有的話, 如果跳轉(zhuǎn)沒有攜帶intent參數(shù),那這里就會是空的沒數(shù)據(jù).
那么以示例中的這個intent跳轉(zhuǎn)為例來寫一個autojs的跳轉(zhuǎn)
//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中的內(nèi)容, 它里面的參數(shù)對應(yīng)的是圖片中intentExtras的key和value, 但是還有class的參數(shù), 這里的class很重要,他指定了value的數(shù)據(jù)類型, class中我們常用的只有少數(shù)的幾個:
java.lang.Interger
java.lang.Lang
java.lang.Float
java.lang.String
java.lang.Boolean
前三種都可以當(dāng)成數(shù)字即可, 如果class是String,就需要把value的內(nèi)容放在"" 引號內(nèi),當(dāng)做一個字符串, 如果是Boolean值, 那value就只有true或者false.沒有特殊的情況 可跳轉(zhuǎn)的activity中,autojs僅支持這幾種數(shù)據(jù)類型的參數(shù).其他情況就是app的自定義類型. 或者bundle數(shù)據(jù)了,bundle的數(shù)據(jù)需要使用安卓的方法跳轉(zhuǎn),autojs和shell就無法跳轉(zhuǎn)了.對于非常規(guī)數(shù)據(jù)類型, 例如下面這種的數(shù)據(jù):
他的class顯然不是常規(guī)的類型, 這種就是抖音內(nèi)部的自定義類型的數(shù)據(jù).
那么在shell環(huán)境中要怎么利用這些數(shù)據(jù)呢. 下面還是以示例圖片中的數(shù)據(jù)來寫成shell的調(diào)用方式:
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命令會有點長, 還是拖動一下看看里面的內(nèi)容, 如果你會寫autojs的調(diào)用方式但不會shell,也沒關(guān)系. autojs提供了一個轉(zhuǎn)換的方法,
app.intentToShell(options);
這里的options是app.startActivity(//填寫在這里的數(shù)據(jù)); 是一個對象.
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);
執(zhí)行一下上面的代碼,就會得到一個shell命令,即可在按鍵中執(zhí)行了.下面再簡單講一下 am start 的常用參數(shù)
am start
-a [ACTION] 即為intent的ACTION
-d [DATA] intent的data
-t [MIME_TYPE] 文件的mime類型
-c [CATEGORY]
-n [className]
-e [EXTRAS] 后面跟 key 和 value 如果你不知道類型就直接使用-e,如果清楚數(shù)據(jù)類型
還是使用下面的參數(shù).
--es 字符串類型的extras
--ez 布爾型的extras
--ei 整型的extras
--el 長整型的extras
--ef 浮點型的extras
上面這幾種--ex的參數(shù) 后面都是跟一對 key value
這幾種都是常用的參數(shù).基本上90%的意圖都只用這幾個參數(shù)了.
-
Android
+關(guān)注
關(guān)注
12文章
3936瀏覽量
127403 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1834瀏覽量
32221 -
文檔
+關(guān)注
關(guān)注
0文章
45瀏覽量
11993
發(fā)布評論請先 登錄
相關(guān)推薦
評論