我们如何识别安卓设备是否正在运行官方安卓 7.0+ 自由格式多窗口模式?



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

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

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

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

  • 某些 Chrome 操作系统设备(例如 Acer Chromebook C738T)
  • 三星 DeX,在 DeX 模式(非屏幕镜像模式)下运行时

两者都提供多个重叠的可调整大小窗口。但是,它们的行为并不相同。例如,DeX 为托管未宣传为可调整大小的窗口托管活动提供了一个"旋转"标题栏选项,该选项可将窗口从纵向翻转为横向。Chrome OS自由格式多窗口实现缺乏这一点。

在Android 7.0+设备(例如Nexus 9)上获得官方自由格式多窗口模式的一种非官方方法是通过adb shell settings put global enable_freeform_support 1。但是,当我在Chrome OS或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+自由格式多窗口实现,而不是其他东西?

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应用程序,并检查它们是否在此处进行了更改。

相关内容

最新更新