Re: [問題] 虛擬按鍵
看你的描述,是想通過按鈕的方式模擬方向鍵嗎?如果是的話,我提一個方案討論一下
。這個方案類似于輸入法的模擬按鍵。我這現在沒有編譯環境,代碼只是示例啊。
(1) 方向鍵的按鈕(上下左右)
這個就是普通的UI實現,響應你的觸摸或點擊事件,在事件響應函數里模擬發送按
鍵。舉例:
public void onClick(View v) {
sendKey(KeyEvent.KEYCODE_LEFT);
}
//或者在onTouch 事件里根據需要發送事件.
這里稍微有點復雜的是,如果你想把這個方向鍵作成懸浮類型(例如懸浮于游戲
應用上面)的,那最好用AlertWindow
(2) 模擬發送按鍵
下面這個模擬一次按鍵,比如按下左鍵然后松開
private void sendKey(int keyCode){
KeyEvent keyDown = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
keyCode, 0);
IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManag
er.getService("window"));
wm.injectKeyEvent(keyDown, false);
try{
Thread.sleep(50);
} catch (InterruptedException exc) {
}
KeyEvent keyUp = new KeyEvent(now, now, KeyEvent.ACTION_UP,keyC
ode, 0);
wm.injectKeyEvent(keyUp, false);
}
(3) 注意點:
A: 發送事件的代碼所在的AP,要加上
<uses-permission android:name="android.permission.INJECT_EVENTS"
/>
B: 如果你這個方向鍵按鈕所在的AP進程,和你游戲所在的進程的UID不同,那
么會失敗。解決的方法是framework里面和injectKey相關的注入前uid的檢測條件,具體
代碼我現在不在公司沒法給出,你可以自己研究一下。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.122.80.38
推
03/21 10:31, , 1F
03/21 10:31, 1F
→
03/21 10:31, , 2F
03/21 10:31, 2F
討論串 (同標題文章)