Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Getevent和指针位置_Android_Touch_Adb - Fatal编程技术网

Android Getevent和指针位置

Android Getevent和指针位置,android,touch,adb,Android,Touch,Adb,我试图通过开发者选项中的指针位置选项获得触摸屏的(x,y)坐标,我使用这些坐标使用sendevent点击屏幕。下面是我执行sendevent的脚本 tap.sh sendevent/dev/input/event0 3 57 2421 sendevent/dev/input/event0 3 58 232 sendevent/dev/input/event0 3 53$1 sendevent/dev/input/event0 3 54$2 sendevent/dev/input/event0

我试图通过开发者选项中的指针位置选项获得触摸屏的(x,y)坐标,我使用这些坐标使用sendevent点击屏幕。下面是我执行sendevent的脚本

tap.sh

sendevent/dev/input/event0 3 57 2421
sendevent/dev/input/event0 3 58 232
sendevent/dev/input/event0 3 53$1
sendevent/dev/input/event0 3 54$2
sendevent/dev/input/event0
sendevent/dev/input/event0 3 57 4294967295
sendevent/dev/input/event0

我从adb shell
sh tap.sh
调用脚本,但它没有点击正确的坐标。相反,它是在不同的位置敲击

此外,当我点击屏幕并在getevent
adb shell getevent
中检查结果时。我发现指针位置和getevent上显示的坐标是不同的

为什么它们不同?我如何解决这个问题


PS:我试过的设备是Nexus 7和Nexus 10。

你知道getevent(根据我的经验,这可能因设备而异)显示基本16个值吗

(旁注:
getevent-l
通常更易于阅读,因为它打印事件类型的字符串表示形式)

i、 e.如果
getevent-l
表示

/dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000001cb       
/dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    00000376
触摸的位置实际上是
(459886)

但是,如果您的代码能够正常工作,那么sendevent在要求十六进制值方面似乎并不符合要求,因为您的(例如)
53
54
在我使用的地方工作
0035
0036

编辑:

在Nexus 5上尝试了原始代码(在中替换了正确的设备文件),我发现没有生成触摸事件(也没有替换十六进制等价物,因为实验严格),也没有重用从
getevent
捕获(并转换)的值。在此之前,我有更好的经验使用基于C one的Python脚本转换事件,并将输出直接写入设备文件

编辑2:


这个问题表明初始代码应该有效。

您是否知道getevent(根据我的经验,这可能因设备而异)显示基本16个值

(旁注:
getevent-l
通常更易于阅读,因为它打印事件类型的字符串表示形式)

i、 e.如果
getevent-l
表示

/dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000001cb       
/dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    00000376
触摸的位置实际上是
(459886)

但是,如果您的代码能够正常工作,那么sendevent在要求十六进制值方面似乎并不符合要求,因为您的(例如)
53
54
在我使用的地方工作
0035
0036

编辑:

在Nexus 5上尝试了原始代码(在中替换了正确的设备文件),我发现没有生成触摸事件(也没有替换十六进制等价物,因为实验严格),也没有重用从
getevent
捕获(并转换)的值。在此之前,我有更好的经验使用基于C one的Python脚本转换事件,并将输出直接写入设备文件

编辑2:


这个问题表明初始代码应该可以工作。

从中获得的X和Y坐标与从开发人员选项中的指针位置获得的坐标不一样。它们使用公式进行映射

displayX = (x - minX) * displayWidth / (maxX - minX + 1)
displayY = (y - minY) * displayHeight / (maxY - minY + 1)

来源:

从中获得的X和Y坐标与从开发人员选项中的指针位置获得的X和Y坐标不同。它们使用公式进行映射

displayX = (x - minX) * displayWidth / (maxX - minX + 1)
displayY = (y - minY) * displayHeight / (maxY - minY + 1)

来源:

打开开发者选项并启用
指针位置
,点击屏幕时可以看到屏幕顶部的x和y坐标,使用这些坐标发送点击事件。

打开开发者选项并启用
指针位置
,可以看到屏幕顶部的x和y坐标当你点击屏幕时,使用这些坐标发送点击事件。

你知道如何在最新的android版本(Q OS,安全补丁>2020年2月)中使用“adb shell dumpsys input”获取屏幕X和屏幕Y吗?你可以使用dumpsys获取显示高度/宽度,使用“adb shell--getevent-lp/dev/input/eventXXX”获取最小/最大X/Y值。只需添加您的特定事件id。您是否知道如何在最新android版本(Q OS,安全补丁>2020年2月)中使用“adb shell dumpsys input”获取Screen_X和Screen_Y?您可以使用dumpsys获取显示高度/宽度,使用“adb shell--getevent-lp/dev/input/eventXXX”获取最小/最大X/Y值。只需添加您的特定事件id。我可以在我的应用程序中获取这些x,y吗?我可以在我的应用程序中获取这些x,y吗?