您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在Android開發(fā)中模擬輸入,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
input 指令
我們打開adb,進(jìn)入shell,輸入input可以看到指令的參數(shù)說明。
其中source一般都是用的默認(rèn)值可以忽略,我們主要關(guān)注的就是后面的command
text:文本輸入;keyevent:鍵盤按鍵;這兩條指令是所有設(shè)備通用的。
tap:點擊屏幕;swipe:滑動屏幕;這兩條指令適用于有觸摸屏的設(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(); } }
1.輸入之前需要提前獲取焦點。
2.輸入有特殊含義的特殊字符,無法直接輸入 需要使用keyevent 如: ' '
我們整一個EditText,然后進(jìn)行text輸入測試。
execShellCmd("input text 'hello,world'");
我們發(fā)現(xiàn)少了一個H,在控制臺可以看到日志。
可以看到在按下H的時候,EditText沒有獲取到焦點。
可能是頁面初始化以后就開始執(zhí)行輸入操作,此時editText還沒有獲取到焦點,獲取焦點可能存在點延時。所以我們嘗試延遲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);
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
android 中坐標(biāo)系如下圖所示。
我們可以打開手機(jī)中的 開發(fā)者選項 -> 指針位置 來輔助定位,可以再上方看到x,y相對的偏移量。
點擊屏幕(100,200)位置。
execShellCmd("input tap 100 200");
滑動屏幕和tap相似只需要傳入兩個坐標(biāo)即可。后面也可以設(shè)置滑動時間(ms),時間越短滑動的相應(yīng)距離就會越長。
從屏幕(100,200)滑動到(300,400)。
execShellCmd("input swipe 100 200 300 400");
關(guān)于怎么在Android開發(fā)中模擬輸入就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。