3

如果我无权访问,有什么方法可以找出屏幕是否被分割Activity?(结构上我不能调用isInMultiWindowMode方法。

我看到默认Activity#isInMultiWindowMode()实现是:

public boolean isInMultiWindowMode() {
    try {
        return ActivityManagerNative.getDefault().isInMultiWindowMode(mToken);
    } catch (RemoteException e) {
    }
    return false;
}

有什么解决方法吗?

4

2 回答 2

3

我认为没有 an 的唯一方法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");
        }
    }
}
于 2019-04-17T09:09:44.930 回答
1

您可以使用的内部片段

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    if (((Activity)getContext()).isInMultiWindowMode()){
        // ...
    }
}
于 2017-05-10T14:07:25.300 回答