作者facing (facing)
看板AndroidDev
标题Re: [问题] 虚拟按键
时间Tue Mar 20 23:12:21 2012
看你的描述,是想通过按钮的方式模拟方向键吗?如果是的话,我提一个方案讨论一下
。这个方案类似于输入法的模拟按键。我这现在没有编译环境,代码只是示例啊。
(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
1F:推 lazior:喔喔~稍微了解...看来这东西有很多要仔细研究学习的了... 03/21 10:31
2F:→ lazior:谢谢!!! 03/21 10:31