安卓13设置分屏bug:竖屏进入设置>旋转平板横屏>旋转平板进入竖屏>按返回键>提示报错

做安卓13的项目时,客户反馈了这样的一个bug:“竖屏进入设置>旋转平板横屏>旋转平板进入竖屏>按返回键>提示报错”,系统里的设置是做了分屏处理的
在这里插入图片描述
复现该问题时抓取log,发现报了input无焦点ANR的问题:
07-21 07:00:59.097 1186 5139 I AnrManager: dumpAnrDebugInfo end: AnrDumpRecord{ Input dispatching timed out (Application does not have a focused window) ProcessRecord{8de1d06 1656:com.android.settings/1000} IsCompleted:true IsCancelled:false }, onlyDumpSelf = false , isSilentANR = false
07-21 07:00:59.098 1186 5139 I AnrManager: addErrorToDropBox app = ProcessRecord{8de1d06 1656:com.android.settings/1000} processName = com.android.settings activityShortComponentName = com.android.settings/.Settings$NetworkDashboardActivity parentShortComponentName = com.android.settings/.Settings parentProcess = ProcessRecord{8de1d06 1656:com.android.settings/1000} annotation = Input dispatching timed out (Application does not have a focused window) mTracesFile = /data/anr/anr_2023-07-21-07-00-53-398

可以看到是NetworkDashboardActivity创建时出现的这个问题,多次尝试发现如果复现后进入这个页面,不做任何处理直接点击导航键返回的话会报错,但如果点击了屏幕任意位置再返回的话,就不会出现这个问题,那么解决方法就是在这个页面创建时,做模拟点击屏幕的处理即可。

经分析,控制这个页面的代码是在alps_mssi\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\network下的NetworkDashboardFragment.java,在这个类里面的各个方法中加入log信息后再复现问题,查看log后可知在页面创建时,该类里的onAttach(),onCreatePreferences()方法被调用了

写一个模拟点击屏幕的方法,在这之前找好要点击屏幕的x、y的坐标,然后导入相关的包

+    public void Touch(){
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                Looper.prepare();
+                try {
+                    Thread.sleep(1500);
+                    //模拟点击click坐标
+                    float x = 792;
+                    float y = 1264;
+                    Instrumentation mInst = new Instrumentation();
+                    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
+                            SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,
+                            x, y, 0));
+                    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
+                            SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,
+                            x, y, 0));
+                    Log.d("gyh","click");
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+
+            }
+
+        }).start();
+    }

最后在onAttach()和onCreatePreferences()中各自调用Touch()方法,可分别单独调用后验证(这里时间紧迫未做区分),最后刷机验证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值