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

        老年机,低端机没有触摸屏的,屏幕操作需要物理按键来控制,有时候安装了一个第三方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就可以了

      至此,分析完毕。

发布了10 篇原创文章 · 获赞 0 · 访问量 2200

猜你喜欢

转载自blog.csdn.net/h1217256980/article/details/101215797
今日推荐