Re: [問題] 虛擬按鍵

看板AndroidDev作者 (facing)時間13年前 (2012/03/20 23:12), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
看你的描述,是想通過按鈕的方式模擬方向鍵嗎?如果是的話,我提一個方案討論一下 。這個方案類似于輸入法的模擬按鍵。我這現在沒有編譯環境,代碼只是示例啊。 (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
文章代碼(AID): #1FQ9vN2j (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1FQ9vN2j (AndroidDev)