我们如何确定Android设备是否运行官方Android 7.0 + Freeform多窗口模式?

时间:2017-06-19 13:26:14

标签: android

当Android 7.0发布时,他们说有一个自由形式的多窗口模式选项,大致类似于传统的窗口桌面操作系统的工作方式(多个重叠的可调整窗口):

  

大型设备的制造商可以选择启用自由格式模式,用户可以在其中自由调整每项活动的大小。如果制造商启用此功能,除了分屏模式外,设备还提供自由形式模式。

但是,他们没有为此模式提供任何官方环境。

我知道至少有两个Android 7.0+环境,现在具有相当于自由形式的多窗口模式:

  • 部分Chrome操作系统设备(例如Acer Chromebook C738T)
  • Samsung DeX,在DeX模式下运行(不是屏幕镜像模式)

两者都提供多个重叠的可调整大小的窗口。但是,他们的行为并不相同。例如,DeX为windows托管活动提供了一个“旋转”标题栏选项,这些活动不会被宣传为可调整大小,从而将窗口从纵向翻转到横向。 Chrome OS自由格式多窗口实现缺乏此功能。

在Android 7.0+设备(例如Nexus 9)上获取官方自由格式多窗口模式的非正式方法是通过adb shell settings put global enable_freeform_support 1。但是,当我在Chrome操作系统或DeX环境中运行settings get global enable_freeform_support时,我会返回null,表示未设置此设置。

问题在于,Android-on-Chrome-OS和DeX本身都非常“怪异”,两者都可能在Android 7.0之上实现了自己的半专有自由形式多窗口模式。毕竟,Android-on-Chrome-OS采用了原有的基于Android 6.0的发行版,三星在Android 7.0之前的部分设备上提供了分屏多窗口模式。

那么,有没有明确的方法来判断一个自由形式多窗口UI的特定Android环境是否正在使用官方的Android 7.0+自由形式多窗口实现而不是其他东西?

1 个答案:

答案 0 :(得分:2)

SystemUI使用以下内容确定自由格式多窗口模式是否可用:

mHasFreeformWorkspaceSupport =
    mPm.hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT) ||
            Settings.Global.getInt(context.getContentResolver(),
                    DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;

请参阅:https://github.com/android/platform_frameworks_base/blob/nougat-release/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java#L213-216

DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT已隐藏,因此您需要将其替换为"enable_freeform_support"

boolean hasFreeFormWorkspaceSupport =
    getPackageManager().hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT) ||
        Settings.Global.getInt(getContentResolver(), "enable_freeform_support", 0) != 0;

我没有Android-on-Chrome-OS或DeX来测试它,但是,这就是SystemUI检查是否启用了自由格式多窗口支持的方式。也许您可以从DeX或Chrome反编译设置或systemui应用程序,并检查它们是否在此处进行了更改。