检查多窗口支持

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

我检查设备是否支持Mutli Window Mode有问题。我正在使用此功能检查它isInMultiWindowMode()但它已在API 24中添加,当我在具有较低api版本的设备上运行我的应用程序时会导致异常。对于较低的api版本,此功能是否有任何替代品?

android android-7.0-nougat multi-window
2个回答
2
投票

对于较低的api版本,此功能是否有任何替代品?

不在Android SDK中。在API级别23之前没有多窗口模式(从Android SDK的角度来看)。并且,无论出于何种原因,Google选择不将isInMultiWindowMode()添加到ActivityCompat,可能是因为他们无法支持相应的事件(onMultiWindowModeChanged())。

所以,这是一个免费的替代方法:

public static boolean isInMultiWindowMode(Activity a) {
  if (Build.VERSION.SDK_INT<Build.VERSION_CODES.M) {
    return false;
  }

  return a.isInMultiWindowMode();
}

将其添加到某个实用程序类,并根据需要调用它。

另请注意,isInMultiWindowMode()患有a race condition,使其不可靠,恕我直言。


0
投票

@CommonsWare解释的是真的,这是竞争条件。因此,如果你从post post方法中调用它,isInMultiWindowMode()将给出实际结果:

    View yourView = findViewById(R.id.yourViewId);
    yourView.post(new Runnable() {
        @Override
        public void run() {
            boolean actualResult = isInMultiWindowMode();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.