【问题标题】:Disable split screen mode for all apps in Android禁用 Android 中所有应用的分屏模式
【发布时间】:2019-03-04 10:35:49
【问题描述】:

我想要什么: 禁止用户对其手机中的任何应用程序使用分屏模式。

我已经做了什么: 要禁用分屏模式,我需要检测调用了哪个方法,并且在该方法中我可以进一步添加一个功能以在其上绘制自定义视图或快速下拉分屏窗口。 我也在研究AccessibilityEvents,可能我需要解析和过滤一些关键字才能进行分屏检测。

那么,Android 会告诉用户刚刚开始使用分屏模式的方法是什么?那么如何才能快速下拉分屏窗口呢?

【问题讨论】:

    标签: android split-screen split-screen-multitasking


    【解决方案1】:

    如果您在注册无障碍服务时询问了AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED 事件,您可以检测到任何应用程序何时进入分屏模式。

    检测分屏模式的可能方法:

    onAccessibilityEvent(AccessibilityEvent event) 函数中,我们需要编写event.getSource().getContentDescription(); 并在字符串中搜索“Split”或“Dismiss”或其他关键字,具体取决于各种自定义rom。每当应用程序进入分屏模式时,其内容描述都会设置为“Split Whatsapp”等。这就是我们可以检测任何特定应用程序何时进入分屏模式的方式。

    阻止任何应用使用分屏模式的可能方法:

    检测到后需要添加此行,以使用户无法使用分屏模式。它只会停靠当前的应用程序窗口。

    performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)
    

    还有其他全局事件可以执行如下操作:

    1. GLOBAL_ACTION_BACK
    2. GLOBAL_ACTION_HOME
    3. GLOBAL_ACTION_LOCK_SCREEN
    4. GLOBAL_ACTION_NOTIFICATIONS
    5. GLOBAL_ACTION_POWER_DIALOG
    6. GLOBAL_ACTION_QUICK_SETTINGS
    7. GLOBAL_ACTION_RECENTS
    8. GLOBAL_ACTION_TAKE_SCREENSHOT

    GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN

    但最适合这种场景的是:GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN

    public class AppAccessibility extends AccessibilityService {
    
        @Override
        protected void onServiceConnected() {
            super.onServiceConnected();
            AccessibilityServiceInfo config = new AccessibilityServiceInfo();
            config.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
            config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
            if (Build.VERSION.SDK_INT >= 16) {
                config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
            }
            setServiceInfo(config);
        }
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            if (event != null && event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
                if (event.getSource() != null && event.getSource().getContentDescription() != null) {
                    if (event.getSource().getContentDescription().toString().contains("Split")) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN));
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多