禁用 Android 中所有应用的分屏模式

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)

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

    GLOBAL_ACTION_BACK GLOBAL_ACTION_HOME GLOBAL_ACTION_LOCK_SCREEN GLOBAL_ACTION_NOTIFICATIONS GLOBAL_ACTION_POWER_DIALOG GLOBAL_ACTION_QUICK_SETTINGS GLOBAL_ACTION_RECENTS 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));
                
            
        
    

【讨论】:

以上是关于禁用 Android 中所有应用的分屏模式的主要内容,如果未能解决你的问题,请参考以下文章

AndroidN多窗口支持

android 12/13 分屏设置Task的Bounds区域-系统车机开发必学

Mac自带的分屏技巧,大大提高工作效率!

插件化框架解读之Android 资源加载机制详解

vim的分屏

Vim的分屏功能