检查屏幕是否处于多窗口模式而没有活动

问题描述 投票:0回答:2

如果我无法访问Activity,有没有办法找出屏幕是否被拆分? (在结构上我不能称为isInMultiWindowMode方法。

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

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

有没有解决方法?

android android-7.0-nougat split-screen
2个回答
0
投票

在Fragment中你可以使用

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
    {
        if (((Activity)getContext()).isInMultiWindowMode())
        {
        }
    }

0
投票

我认为没有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");
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.