我正在为操纵杆开发一个 android IME。它由Thread
不断监听来自特定设备的事件组成,然后如果某些条件为真,则决定做某事。有没有办法将此设备的输入事件专门绑定到我的 IME,以便它们不会传播到应用程序?
我尝试ioctl(fd,EVIOCGRAB,1)
在本机库中使用来独占控制我的设备,但它似乎不起作用。
更新: EVIOCGRAB
工作正常,这就是我解决问题的方法!
我正在为操纵杆开发一个 android IME。它由Thread
不断监听来自特定设备的事件组成,然后如果某些条件为真,则决定做某事。有没有办法将此设备的输入事件专门绑定到我的 IME,以便它们不会传播到应用程序?
我尝试ioctl(fd,EVIOCGRAB,1)
在本机库中使用来独占控制我的设备,但它似乎不起作用。
更新: EVIOCGRAB
工作正常,这就是我解决问题的方法!
对于有兴趣的人,我终于找到了方法:
在您的“源”设备上使用它(它是您可以与 libEventInjector 一起使用的本机代码):
int fd = open("/dev/input/eventX", O_RDONLY);
if(fd<0) return;
if(ioctl(fd,EVIOCGRAB,1) <0) return;
如果一切顺利,库将拥有对设备的独占访问权限,现在在您的 IME 中启动一个持续读取的线程,/dev/input/eventX
以便您可以读取事件,但它们不会传播到其他地方。
更新: EVIOCGRAB 仅对 Java 类的函数实例提供独占控制。关闭程序时拦截事件而不阻塞设备的最佳方法是:
public class Class extends Thread{
boolean running = true;
public void run(){
mySourceDevice.getExclControl();
while(running){
}
mySourceDevice.releaseExclControl();
}
public void interrupt(){
runing=false;
super.interrupt();
}
}