如果我无法访问Activity
,有没有办法找出屏幕是否被拆分? (在结构上我不能称为isInMultiWindowMode
方法。
我看到默认的Activity#isInMultiWindowMode()
实现是:
public boolean isInMultiWindowMode() {
try {
return ActivityManagerNative.getDefault().isInMultiWindowMode(mToken);
} catch (RemoteException e) {
}
return false;
}
有没有解决方法?
在Fragment中你可以使用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
if (((Activity)getContext()).isInMultiWindowMode())
{
}
}
我认为没有Activity
的唯一方法是使用AccessibilityService
,它具有获取当前显示的窗口列表的权限,并检查是否有一个类型为AccessibilityWindowInfo.TYPE_SPLIT_SCREEN_DIVIDER
的窗口。
例如,您可以使用以下方法:
private boolean inSplitScreenMode(List<AccessibilityWindowInfo> windows) {
for (AccessibilityWindowInfo window : windows) {
if (window.getType() == AccessibilityWindowInfo.TYPE_SPLIT_SCREEN_DIVIDER) {
return true;
}
}
return false;
}
接收窗口状态更改辅助功能事件时检查此方法
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if ((event.getEventType() & AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) != 0) {
if (inSplitScreenMode(getWindows()) {
Log.d(TAG, "Split screen mode detected");
} else {
Log.d(TAG, "No split screen");
}
}
}