亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析Android 模擬鍵盤鼠標(biāo)事件

 更新時(shí)間:2013年06月15日 14:31:50   作者:  
本篇文章是對(duì)Android模擬鍵盤鼠標(biāo)事件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

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

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

復(fù)制代碼 代碼如下:

[font=宋體]//在Activity的onCreate方法中對(duì)下列函數(shù)進(jìn)行調(diào)用
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();   //主線程創(chuàng)建時(shí),會(huì)創(chuàng)建一
個(gè)默認(rèn)的Looper對(duì)象,而Looper對(duì)象的創(chuàng)建,將自動(dòng)創(chuàng)建一個(gè)Message Queue。其他非主線程,不會(huì)自動(dòng)創(chuàng)建Looper,要需要的時(shí)候,通過調(diào)
用prepare函數(shù)來實(shí)現(xiàn)。
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代碼:
復(fù)制代碼 代碼如下:

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

Touch指定坐標(biāo),如下例子即
java代碼:
復(fù)制代碼 代碼如下:

[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]

模擬滑動(dòng)軌跡
將上述方法中間添加 MotionEvent.ACTION_MOVE

相關(guān)文章

最新評(píng)論