android uinput 按键_android 使用uinput模拟输入设备的方法

易采站长站为您分析android 使用uinput模拟输入设备的方法,有需要的朋友可以参考一下

在google remote中,android接收端接收socket发来的IR CODE,然后将IR CODE模拟出来发给系统处理,这就是google remote接收端的原理。

系统端怎样模拟input event呢?

方法一:通过Instrumentation.sendKeyDownUpSync 实现,简单使用但是问题在于sendKeyDownUpSync发出的event,无法运行到

interceptKeyBeforeDispatching,也就无法正常作用 HOME,VOL...

方法二:通过uinput桥接;原理是利用内核现有的uinput驱动,通过内核驱动uinput来发送input event,而且还容易使用kl,kcm 客制化;

经过比较方法二较优,下面就就给出方法二的测试代码...

1、main函数,setup_uinput_device 完成设备的注册,然后创建一个线程 VirtualInputDev_EventThread,该线程重复发出keycode;

复制代码代码如下:

int main()

{

printf("Enter process !!!! n");

stVirtualInputDevData *pKpdData = (stVirtualInputDevData*) malloc(sizeof(stVirtualInputDevData));

pKpdData->min_keycode = umin_keycode;

pKpdData->max_keycode = umax_keycode;

if (setup_uinput_device(pKpdData) < 0) {

printf("Unable to find uInput devicen");

free(pKpdData);

return -1;

}

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

if (0 != pthread_create(&keypad_EventThreadId, &attr, VirtualInputDev_EventThread, (void *)0)) {

printf("Create KeypadEventThread Failed!!n");

exit(1);

}

// Coverity server need set to ignore this.

while (1) {

usleep(1000000);  // sleep 1 second

}

free(pKpdData);

pKpdData = 0;

// Destroy the device

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值