我检查的问题是设备是否支持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版本,这个功能有什么替代品吗?
答案 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();
}
});