美文网首页
无障碍服务accessibility获取状态栏状态(隐藏和显示)

无障碍服务accessibility获取状态栏状态(隐藏和显示)

作者: 大胡子的机器人 | 来源:发表于2019-11-19 10:18 被阅读0次

    业务需求,定制的launcher桌面和状态栏,但系统的状态栏又还在,希望进入第三方app后仍然显示自己的状态栏。


    image.png

    由于系统定制,我们去掉了系统自带的状态栏,但厂商又没有去除干净,仅仅把有内容的状态栏的高度设置为0了,这就导致我们的状态栏不能设置为系统状态栏,仅仅是作为了悬浮窗浮在所有界面之上,在第三方app中就不好控制隐藏和显示,就比如上图中的计算器界面。

    解决方案:

    通过无障碍服务,监听界面状态,如果发现状态栏存在(即存在如下图的ID:android:id/statusBarBackground),那么把自定义的状态栏显示,如果不存在,那么就隐藏自定义的状态栏


    image.png

    注意无障碍服务的xml配置文件:

    <?xml version="1.0" encoding="utf-8"?>
    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:accessibilityEventTypes="typeAllMask"
        android:accessibilityFeedbackType="feedbackGeneric"
        android:accessibilityFlags="flagDefault|flagIncludeNotImportantViews|flagRetrieveInteractiveWindows"
        android:canRequestFilterKeyEvents="true"
        android:canRetrieveWindowContent="true"
        android:description="@string/app_name" />
    

    无障碍服务代码:

    public class BonvoAccessibilityService extends AccessibilityService {
    ...
      @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            if(event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
                //查看当前页面是否属于第三方app,并且判断是否全屏
                try {
                    List<AccessibilityWindowInfo> windowList = getWindows();
                    for (AccessibilityWindowInfo win : windowList) {
                        List<AccessibilityNodeInfo> statusNodes = win.getRoot().findAccessibilityNodeInfosByViewId("android:id/statusBarBackground");
                        if (statusNodes != null && statusNodes.size() > 0 && !event.getPackageName().toString().contentEquals(getPackageName())) { //自己的应用自己管理状态栏
                            Log.e(TAG, "存在状态栏");
                            break;
                        }
                    }
                }catch (Exception ex){
                    ex.printStackTrace();
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:无障碍服务accessibility获取状态栏状态(隐藏和显示)

          本文链接:https://www.haomeiwen.com/subject/ufqwictx.html