android 浏览器模拟点击,说说android下TV版本UC浏览器模拟鼠标的实现

#include

#include

#include"com.coship.coshare.domain.MouseUtils.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "input.h"

#include "uinput.h"

#define die(str, args...) do { perror(str); exit(EXIT_FAILURE); } while(0);

#define LOG_TAG "System.out.c"

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

int fd;

struct uinput_user_dev uidev; // uInput device structure

JNIEXPORT void JNICALL Java_com_coship_coshare_domain_MouseUtils_mouse_1clck

(JNIEnv * env, jobject obj , jint type, jint code , jint value )

{

simulate_mousesingleclick(fd);

}

JNIEXPORT void JNICALL Java_com_coship_coshare_domain_MouseUtils_mouse_1move

(JNIEnv *env, jobject obj , jint type , jint value_x , jint value_y)

{

simulate_mouse(fd, value_x, value_y);

}

JNIEXPORT void JNICALL Java_com_coship_coshare_domain_MouseUtils_mouse_1open

(JNIEnv *env, jobject obj)

{

fd = setup_uinput_device();

if(fd <= 0)

{

LOGI("error open keyboard:\n");

return;

}

}

JNIEXPORT void JNICALL Java_com_coship_coshare_domain_MouseUtils_mouse_1close

(JNIEnv *env, jobject obj)

{

close_mouse_device();

}

void close_mouse_device()

{

close(fd);

}

void simulate_mouse(int fd, int value_x, int value_y)

{

struct input_event event;

memset(&event, 0, sizeof(event));

gettimeofday(&event.time, NULL);

event.type = EV_REL;

event.code = REL_X;

event.value = value_x;

write(fd, &event, sizeof(event));

event.type = EV_REL;

event.code = REL_Y;

event.value = value_y;

write(fd, &event, sizeof(event));

event.type = EV_SYN;

event.code = SYN_REPORT;

event.value = 0;

write(fd, &event, sizeof(event));

}

/******************************************

模拟鼠标点击

*****************************************/

void simulate_mousesingleclick(int fd)

{

struct input_event event;

memset(&event, 0, sizeof(event));

gettimeofday(&event.time, NULL);

event.type = EV_KEY;

event.code = BTN_LEFT;

event.value = 1;

write(fd, &event, sizeof(event));

event.type = EV_SYN;

event.code = SYN_REPORT;

event.value = 0;

write(fd, &event, sizeof(event));

event.type = EV_KEY;

event.code = BTN_LEFT;

event.value = 0;

write(fd, &event, sizeof(event));

event.type = EV_SYN;

event.code = SYN_REPORT;

event.value = 0;

write(fd, &event, sizeof(event));

}

/***************************

打开鼠标

***************************/

int setup_uinput_device()

{

int i=0;

// Open the input device

fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);

if(fd < 0)

{

die("error: open /dev/uinput");

}

memset(&uidev, 0, sizeof(uidev)); // Intialize the uInput device to NULL

snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-Openkk");

uidev.id.bustype = BUS_USB;

uidev.id.vendor = 0x1;

uidev.id.product = 0x1;

uidev.id.version = 1;

// Setup the driver I/O channels

ioctl(fd, UI_SET_EVBIT, EV_KEY);

ioctl(fd, UI_SET_KEYBIT, BTN_LEFT);

for (i=0; i < 256; i++)

{

ioctl(fd, UI_SET_KEYBIT, i);

}

ioctl(fd, UI_SET_EVBIT, EV_REL);

ioctl(fd, UI_SET_RELBIT, REL_X);

ioctl(fd, UI_SET_RELBIT, REL_Y);

/* Create input device into input sub-system */

write(fd, &uidev, sizeof(uidev));

if(ioctl(fd, UI_DEV_CREATE) < 0)

{

die("error: create uinput device");

LOGI("error: create uinput device");

}

return fd;

}

如上就是在Android下实现模拟鼠标的简单思路了,至于怎么将手机客户端的相关命令发送到Android下的TV端然后再模拟鼠标这个的方法就老多了,譬如可以通过网络啊通过蓝牙啊。这些东西就不在我讨论的范围之内了。我这里只是提供了一个简单思路。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值