欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android apk物理按键焦点事件失效原因分析

程序员文章站 2024-02-10 14:04:28
...

        老年机,低端机没有触摸屏的,屏幕操作需要物理按键来控制,有时候安装了一个第三方apk,发现控制不了apk里面的一些按钮,调出鼠标光标发现又是可以点击的,据此可以推测是该按钮没有获取相应的焦点,导致物理按键的事件到达不到。本篇文章主要就讲解如何分析第三方apk的某一个按钮是否设置了焦点。

一、几个涉及到的ADB模拟事件

1、平时测试没有触摸屏的机器,但是又想验证屏幕的点击事件,就可以使用屏幕模拟的点击事件

        adb shell input touchscreen tap 80 120 //其中80,是屏幕的x坐标,120是屏幕的y坐标,基于屏幕的分辨率大小

2、模拟输入框输入

        adb shell input text "hehe"

3、模拟物理按键事件点击

      //模拟按下数字0键
        adb shell input keyevent "KEYCODE_PTT"
      //模拟按下返回键
        adb shell input keyevent 4

二、焦点分析步骤

 1、通过adb dump 当前页面的信息

      adb shell uiautomator dump --compressed  /data/local/tmp/uidump.xml

 2、打开uidump.xml文件,可以看到如下内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="1">
	<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][160,128]">
		<node index="0" text="****" resource-id="com.test.hpe:id/commonui_basic_title" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[53,13][107,43]" />
		<node index="1" text="网络连接超时" resource-id="com.test.hpe:id/main_login_status" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[26,44][134,105]" />
		<node index="2" text="重新登录" resource-id="com.test.hpe:id/main_login_again" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,105][160,128]" />
	</node>
</hierarchy>

      通过分析子节点index=2的节点,重点关注focusable和focused两个属性,如果都为false的话说明就没有设置焦点,物理按键就无法控制该控件。定位到相应的控件了,设置focused 和focusable为true就可以了

      至此,分析完毕。

相关标签: focus

上一篇: python 连接mysql数据库

下一篇: