欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中三種注入事件方法比較

 更新時間:2015年02月26日 12:01:22   投稿:junjie  
這篇文章主要介紹了Android中三種注入事件方法比較,本文分別講解了使用內(nèi)部APIs、使用instrumentation對象、直接注入事件到設(shè)備/dev/input/eventX等3種方法,需要的朋友可以參考下

方法1:使用內(nèi)部APIs

該方法和其他所有內(nèi)部沒有向外正式公布的APIs一樣存在它自己的風(fēng)險。原理是通過獲得WindowManager的一個實(shí)例來訪問injectKeyEvent/injectPointerEvent這兩個事件注入方法。

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

IBinder wmbinder = ServiceManager.getService( "window" );
IWindowManager m_WndManager = IWindowManager.Stub.asInterface( wmbinder );

ServiceManager和Windowsmanager被定義為存根Stubs類。我們根據(jù)我們的需要綁定上這些服務(wù)并訪問里面的方法。 To send a key do the following: 通過以下方式發(fā)送一個事件:
復(fù)制代碼 代碼如下:

// key down
m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A ),true );
// key up
m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_UP, KeyEvent.KEYCODE_A ),true );
 
發(fā)送touch/mouse事件:
復(fù)制代碼 代碼如下:

//pozx goes from 0 to SCREEN WIDTH , pozy goes from 0 to SCREEN HEIGHT
m_WndManager.injectPointerEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,pozx, pozy, 0), true);
m_WndManager.injectPointerEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,pozx, pozy, 0), true);

這種方法能在你的應(yīng)用中很好的工作,但,也僅僅只能在你的應(yīng)用中而已

一旦你想要往其他窗口注入keys/touch事件,你將會得到一個強(qiáng)制關(guān)閉的消息:

方法2: 使用instrumentation對象

  相對以上的隱藏接口和方法,這個是比較干凈(上面的是隱藏的,故需要用到android不干凈不推薦的方法去獲?。┑姆绞剑恍业氖滤廊挥猩厦娴腏INECT_EVENTS這個只有系統(tǒng)應(yīng)用(基本上就是android自己提供的,如monkey)才被允許的權(quán)限問題。

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

Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendKeyDownUpSync( KeyEvent.KEYCODE_B );

以下是觸摸事件實(shí)例:
復(fù)制代碼 代碼如下:

//pozx goes from 0 to SCREEN WIDTH , pozy goes from 0 to SCREEN HEIGHT
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,pozx, pozy, 0);
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,pozx, pozy, 0);

在應(yīng)用內(nèi)操作的話完全沒有問題,但一旦跳出這個應(yīng)用去觸發(fā)按鍵事件的話就會崩潰。不是因?yàn)檫@個方法不工作,而是因?yàn)閍ndroid開發(fā)人員做了限制。謝謝你們,android的開發(fā)者們,你牛逼!個屁。

  通過分析sendPointerSync的對應(yīng)代碼,可以看到其實(shí)instrumentation使用到的注入事件方式其實(shí)和方法一提到的通過WindowManager.injectPointerEvents是一樣的,所以穿的都是同一條內(nèi)褲,只是Robotium出來走動的時候套上條時尚喇叭褲,而以上直接調(diào)用WindowManager的方式就猶如只穿一條內(nèi)褲出街的區(qū)別而已。

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

public void sendPointerSync(MotionEvent event) {
validateNotAppThread();
try {
(IWindowManager.Stub.asInterface(ServiceManager.getService("window")))
.injectPointerEvent(event, true);
} catch (RemoteException e) {
}
}

方法3:直接注入事件到設(shè)備/dev/input/eventX

linux以系統(tǒng)設(shè)備的方式向用戶暴露了一套統(tǒng)一的事件注入接口/dev/input/eventX(其中X代表一個整數(shù))。我們可以直接跳用而跳過以上的平臺(android這個機(jī)遇linux的平臺)限制問題。但是這需要工作的話,你需要rooted過的設(shè)備。

設(shè)備文件eventX默認(rèn)是被設(shè)置為660這個權(quán)限的(Owner和同組成員有讀寫,而owner是root)。為了向這個設(shè)備注入事件,你必須讓它能可寫。所以請先做以下動作:

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

adb shell
su
chmod 666 /dev/input/event3

你將需要root權(quán)限來運(yùn)行chmod命令。

相關(guān)文章

  • Android仿微信圖片點(diǎn)擊瀏覽的效果

    Android仿微信圖片點(diǎn)擊瀏覽的效果

    這篇文章主要為大家詳細(xì)介紹了Android仿微信圖片點(diǎn)擊瀏覽的效果,Android 2D平滑放大顯示ImageView,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android實(shí)現(xiàn)APP自動更新功能

    Android實(shí)現(xiàn)APP自動更新功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)APP自動更新功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • android實(shí)現(xiàn)Splash閃屏效果示例

    android實(shí)現(xiàn)Splash閃屏效果示例

    這篇文章主要介紹了android實(shí)現(xiàn)Splash閃屏效果的方法,涉及Android中postDelayed方法及AndroidManifest.xml權(quán)限控制的相關(guān)使用技巧,需要的朋友可以參考下
    2016-08-08
  • 詳解Android中的NestedScrolling機(jī)制帶你玩轉(zhuǎn)嵌套滑動

    詳解Android中的NestedScrolling機(jī)制帶你玩轉(zhuǎn)嵌套滑動

    這篇文章主要給大家詳細(xì)解析了Android中的NestedScrolling機(jī)制,通過介紹該機(jī)制帶你玩轉(zhuǎn)Android中的嵌套滑動效果,文中給出了詳細(xì)的示例代碼和介紹,需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。
    2017-05-05
  • Android如何使用RecyclerView打造首頁輪播圖

    Android如何使用RecyclerView打造首頁輪播圖

    這篇文章主要為大家詳細(xì)介紹了Android如何使用RecyclerView打造首頁輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • android Activity相對布局的使用方法

    android Activity相對布局的使用方法

    Activity相對布局控件的位置是與其周圍控件的位置相關(guān)的,從名字可以看出來,這些位置都是相對的,確定出了其中一個控件的位置就可以確定另一個控件的位置,下面用實(shí)例說明Activity相對布局的使用方法
    2013-11-11
  • OKhttp攔截器實(shí)現(xiàn)實(shí)踐環(huán)節(jié)源碼解析

    OKhttp攔截器實(shí)現(xiàn)實(shí)踐環(huán)節(jié)源碼解析

    這篇文章主要為大家介紹了OKhttp攔截器實(shí)現(xiàn)實(shí)踐環(huán)節(jié)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動效果

    Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動效果

    這篇文章主要為大家詳細(xì)介紹了Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android開發(fā)中MotionEvent坐標(biāo)獲取方法分析

    Android開發(fā)中MotionEvent坐標(biāo)獲取方法分析

    這篇文章主要介紹了Android開發(fā)中MotionEvent坐標(biāo)獲取方法,結(jié)合實(shí)例形式分析了MotionEvent獲取坐標(biāo)的相關(guān)函數(shù)使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-02-02
  • Android實(shí)現(xiàn)動態(tài)自動匹配輸入的內(nèi)容

    Android實(shí)現(xiàn)動態(tài)自動匹配輸入的內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)動態(tài)自動匹配輸入的內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論