检查多窗口支持

时间:2017-01-21 06:52:44

标签: android android-7.0-nougat multi-window

我检查的问题是设备是否支持Mutli Window Mode。我使用此功能检查for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar // Yields "HIeflmlmop" for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar // Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p') 但它已在API 24中添加,当我在具有较低api版本的设备上运行我的应用时,会导致异常。对于较低的api版本,这个功能有什么替代品吗?

2 个答案:

答案 0 :(得分: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使其不可靠,恕我直言。

答案 1 :(得分:0)

@CommonsWare解释的是正确的,这是一个竞争条件。因此,如果您从post方法内部调用isInMultiWindowMode(),它将给出实际结果:

    View yourView = findViewById(R.id.yourViewId);
    yourView.post(new Runnable() {
        @Override
        public void run() {
            boolean actualResult = isInMultiWindowMode();
        }
    });