Android開發(fā)中如何模擬輸入
主要思路是使用 adb shell input指令來模擬按鍵及觸摸輸入。
但是前提是需要root,且華為手機(jī)出于安全考慮已經(jīng)停止了root解碼。所以測(cè)試建議換個(gè)別的手機(jī)?;蚴侵苯佑肁S中的模擬器,用有Google Apis的版本。
input 指令
我們打開adb,進(jìn)入shell,輸入input可以看到指令的參數(shù)說明。

其中source一般都是用的默認(rèn)值可以忽略,我們主要關(guān)注的就是后面的command
- text:文本輸入;keyevent:鍵盤按鍵;這兩條指令是所有設(shè)備通用的。
- tap:點(diǎn)擊屏幕;swipe:滑動(dòng)屏幕;這兩條指令適用于有觸摸屏的設(shè)備。
- press,roll適用于有觸摸球的設(shè)備。
模擬輸入
在使用input指令之前我們要先獲取一下root權(quán)限。
private void execShellCmd(String cmd) {
try {
Process process = Runtime.getRuntime().exec("su");
OutputStream outputStream = process.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(
outputStream);
dataOutputStream.writeBytes(cmd);
dataOutputStream.flush();
dataOutputStream.close();
outputStream.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
text
1.輸入之前需要提前獲取焦點(diǎn)。
2.輸入有特殊含義的特殊字符,無法直接輸入 需要使用keyevent 如: ' '
我們整一個(gè)EditText,然后進(jìn)行text輸入測(cè)試。
execShellCmd("input text 'hello,world'");
我們發(fā)現(xiàn)少了一個(gè)H,在控制臺(tái)可以看到日志。

可以看到在按下H的時(shí)候,EditText沒有獲取到焦點(diǎn)。

可能是頁面初始化以后就開始執(zhí)行輸入操作,此時(shí)editText還沒有獲取到焦點(diǎn),獲取焦點(diǎn)可能存在點(diǎn)延時(shí)。所以我們嘗試延遲1s后進(jìn)行輸入。
private Handler handler = new Handler();
private Runnable task = new Runnable() {
public void run() {
execShellCmd("input text 'hello,world'");
}
};
// 延遲1s后輸入
handler.postDelayed(task,1000);

keyevent
execShellCmd("input text 'hello,world' \n input keyevent 68 \n input keyevent 21");
輸入hello,world,然后輸入',然后左移光標(biāo)

常見的keycode可以參見frameworks/base/core/java/android/view/KeyEvent.java

tap
android 中坐標(biāo)系如下圖所示。

我們可以打開手機(jī)中的 開發(fā)者選項(xiàng) -> 指針位置 來輔助定位,可以再上方看到x,y相對(duì)的偏移量。

點(diǎn)擊屏幕(100,200)位置。
execShellCmd("input tap 100 200");
swipe
滑動(dòng)屏幕和tap相似只需要傳入兩個(gè)坐標(biāo)即可。后面也可以設(shè)置滑動(dòng)時(shí)間(ms),時(shí)間越短滑動(dòng)的相應(yīng)距離就會(huì)越長。
從屏幕(100,200)滑動(dòng)到(300,400)。
execShellCmd("input swipe 100 200 300 400");
以上就是Android開發(fā)中如何模擬輸入的詳細(xì)內(nèi)容,更多關(guān)于Android 模擬輸入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android WebView 內(nèi)處理302重定向不跳轉(zhuǎn)的解決
這篇文章主要介紹了Android WebView 內(nèi)處理302重定向不跳轉(zhuǎn)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android利用ScaleTransition實(shí)現(xiàn)吹氣球動(dòng)畫
這篇文章主要為大家介紹了如何將利用ScaleTransition實(shí)現(xiàn)一個(gè)吹氣球的動(dòng)畫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04
Android瀑布流照片墻實(shí)現(xiàn) 體驗(yàn)不規(guī)則排列的美感
這篇文章主要為大家詳細(xì)介紹了Android瀑布流照片墻實(shí)現(xiàn),體驗(yàn)不規(guī)則排列的美感,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
解決Android Studio Gradle Metadata特別慢的問題
這篇文章主要介紹了解決Android Studio Gradle Metadata特別慢的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android實(shí)現(xiàn)簡(jiǎn)易登陸注冊(cè)邏輯的實(shí)例代碼
在android的應(yīng)用中越來越多的包含了網(wǎng)絡(luò)互動(dòng)功能,這就帶來了注冊(cè),登陸賬號(hào)功能,這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)簡(jiǎn)易登陸注冊(cè)邏輯的相關(guān)資料,需要的朋友可以參考下2021-06-06
Android用戶注冊(cè)界面簡(jiǎn)單設(shè)計(jì)
這篇文章主要為大家分享了Android用戶注冊(cè)界面簡(jiǎn)單設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Flutter多項(xiàng)選擇彈窗實(shí)現(xiàn)詳解
這篇文章介紹了Flutter多項(xiàng)選擇彈窗實(shí)現(xiàn)詳解,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2021-11-11
詳解Android實(shí)現(xiàn)購物車頁面及購物車效果(點(diǎn)擊動(dòng)畫)
本篇文章主要介紹了詳解Android實(shí)現(xiàn)購物車頁面及購物車效果(點(diǎn)擊動(dòng)畫),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08
Flutter 底部彈窗ModelBottomSheet的使用示例
在實(shí)際開發(fā)過程中,經(jīng)常會(huì)用到底部彈窗來進(jìn)行快捷操作,例如選擇一個(gè)選項(xiàng),選擇下一步操作等等。在 Flutter 中提供了一個(gè) showModelBottomSheet 方法用于彈出底部彈窗,本篇介紹如何使用底部彈窗。2021-06-06

