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

时间:2019-03-04 10:35:50

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

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

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

那么Android会告诉用户用户刚刚开始使用分屏模式的方法是什么?然后如何快速下拉拆分屏幕窗口?

1 个答案:

答案 0 :(得分:0)

如果您在注册无障碍服务时询问了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));
                }
            }
        }
    }
}