我想要的: 禁止用户对手机中的任何应用程序使用分屏模式。
我已经完成的工作: 要禁用分屏模式,我需要检测调用了哪个方法,并且在该方法中我可以进一步添加一个功能以在其上绘制自定义视图或快速下拉分屏窗口。我也在研究AccessibilityEvents,可能我需要解析和过滤一些关键字才能进行分屏检测。
那么Android会告诉用户刚刚开始使用分屏模式的方法是什么。然后我怎样才能快速下拉分屏窗口?
我想要的: 禁止用户对手机中的任何应用程序使用分屏模式。
我已经完成的工作: 要禁用分屏模式,我需要检测调用了哪个方法,并且在该方法中我可以进一步添加一个功能以在其上绘制自定义视图或快速下拉分屏窗口。我也在研究AccessibilityEvents,可能我需要解析和过滤一些关键字才能进行分屏检测。
那么Android会告诉用户刚刚开始使用分屏模式的方法是什么。然后我怎样才能快速下拉分屏窗口?
如果您在注册无障碍服务时询问了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_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));
}
}
}
}
}