雖說這個話題發布在公眾號上有些晚了, 很久之前我在其他平臺上發過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%的意圖都只用這幾個參數了.
-
Android
+關注
關注
12文章
3946瀏覽量
128009 -
參數
+關注
關注
11文章
1860瀏覽量
32449 -
文檔
+關注
關注
0文章
48瀏覽量
12032
發布評論請先 登錄
相關推薦
評論