一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 淺析Android 模擬鍵盤鼠標事件

淺析Android 模擬鍵盤鼠標事件

2021-01-29 14:43Android開發網 Android

本篇文章是對Android模擬鍵盤鼠標事件進行了詳細的分析介紹,需要的朋友參考下

通過Socket + Instrumentation實現模擬鍵盤鼠標事件主要通過以下三個部分組成:
Socket編程:實現PC和Emulator通訊,并進行循環監聽
Service服務:將Socket的監聽程序放在Service中,從而達到后臺運行的目的。這里要說明的是啟動服務有兩種方式,bindService和startService,兩者的區別是,前者會使啟動的Service隨著啟動Service的Activity的消亡而消亡,而startService則不會這樣,除非顯式調用stopService,否則一直會在后臺運行因為Service需要通過一個Activity來進行啟動,所以采用startService更適合當前的情形
Instrumentation發送鍵盤鼠標事件:Instrumentation提供了豐富的以send開頭的函數接口來實現模擬鍵盤鼠標,如下所述:
sendCharacterSync(int keyCode)            //用于發送指定KeyCode的按鍵
sendKeyDownUpSync(int key)                //用于發送指定KeyCode的按鍵
sendPointerSync(MotionEvent event)     //用于模擬Touch
sendStringSync(String text)                   //用于發送字符串
注意:以上函數必須通過Message的形式拋到Message隊列中。如果直接進行調用加會導致程序崩潰。
對于Socket編程和Service網上有很多成功的范例,此文不再累述,下面著重介紹一下發送鍵盤鼠標模擬事件的代碼:

發送鍵盤KeyCode:
步驟1. 聲明類handler變量
private static Handler handler;
步驟2. 循環處理Message
java代碼:

復制代碼 代碼如下:

[font=宋體]//在Activity的onCreate方法中對下列函數進行調用
private void createMessageHandleThread(){
//need start a thread to raise looper, otherwise it will be blocked
Thread t = new Thread() {
public void run() {
Log.i( TAG,"Creating handler ..." );
Looper.prepare();   //主線程創建時,會創建一
個默認的Looper對象,而Looper對象的創建,將自動創建一個Message Queue。其他非主線程,不會自動創建Looper,要需要的時候,通過調
用prepare函數來實現。
handler = new Handler(){
public void handleMessage(Message msg) {
//process incoming messages here
}
};
Looper.loop();
Log.i( TAG, "Looper thread ends" );
}
};
t.start();
}[/font]


步驟3. 在接收到Socket中的傳遞信息后拋出Message
java代碼:

復制代碼 代碼如下:

[font=宋體]handler.post( new Runnable() {
public void run() {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
}
} );[/font]


Touch指定坐標,如下例子即
java代碼:

復制代碼 代碼如下:

[font=宋體]touch point(240,400)
Instrumentation inst=new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 240, 400, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 240, 400, 0));[/font]


模擬滑動軌跡
將上述方法中間添加 MotionEvent.ACTION_MOVE

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青久久精品国产 | 精品国产乱码久久久久久免费 | 国产精品嫩草影院一二三区 | 九九精品免费视频 | 日本在线一区二区 | 扒开双腿羞辱调教play视频 | 国产精品久久免费观看 | 调教催眠改造np总攻 | 99国产小视频 | 欧美一区二区三区四区五区六区 | 久久re视频这里精品一本到99 | 成人精品一区二区三区中文字幕 | 精品久久久久久久久久久久久久久 | 好男人资源免费播放 | 乌克兰成人性色生活片 | 金莲一级淫片aaaaaa | 97国产蝌蚪视频在线观看 | 免费高清观看 | 99r8这里精品热视频免费看 | 超级乱淫 不详 | 色婷婷久久综合中文久久一本 | 大陆黄色片 | 3d动漫美女被吸乳羞羞视频 | 亚洲AV无码乱码在线观看浪潮 | 国产精品模特hd在线 | 性色欲情网站IWWW九文堂 | 国产高清路线一路线二2022 | 无码日韩精品一区二区免费 | 人妖巨茎video | 午夜国产精品视频在线 | 91精品国产综合久久 | 无遮挡h肉动漫高清在线 | 特级av毛片免费观看 | 亚洲色图第四色 | 亚洲男女在线 | 美女和男人一起差差 | 国产成人精品综合在线观看 | 精品一久久香蕉国产二月 | 日韩亚洲欧美一区二区三区 | 四虎影院永久在线 | 欧美人妖大啪啪 |