2

注意:这个问题是针对 Android M 开发者预览版而不是官方 Android 6.0 提出的。

android.os.Build.VERSION.SDK_INT 在 Android M 上返回 22(22 是 LOLLIPOP_MR1 的 api 级别)。我们应该如何检查应用程序是否在 Android M 上运行?我有这样的想法,但这显然行不通:

public boolean isAndroidMOrHigher() {
    return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.MNC;
}

为什么我需要这个?例如,检查我是否需要请求权限,因为 Android M 有一个新的权限模型。

我可以这样做:

public boolean isAndroidMOrHigher() {
    return "M".equalsIgnoreCase(Build.VERSION.RELEASE);
}

但这似乎是一个 hack IMO。

真的有两个问题:

  • 最干净的方法是什么?
  • 这是一个错误还是应该是这样的?
4

2 回答 2

6

最干净的方法是什么?

更新:谷歌代码示例显示了一个不同的选项:"MNC".equals(Build.VERSION.CODENAME).

就个人而言,我正在查看PREVIEW_SDK_INT,如果它存在

static private boolean putMarzipanInYourPiePlateBingo() {
  boolean result=false;

  if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP_MR1) {
    try {
      Field f=Build.VERSION.class.getField("PREVIEW_SDK_INT");

      if (f.getInt(null)>0) {
        result=true;
      }
    }
    catch (NoSuchFieldException e) {
      // no problem, must really be API 22
    }
    catch (IllegalAccessException e) {
      // ummm... this shouldn't happen
    }
  }

  return(result);
}

这比你的M支票更麻烦。但是,如果 Google 决定玩更多游戏(例如 change Build.VERSION.RELEASE),我认为这种方法会更加稳定。

这是一个错误还是应该是这样的?

一个人的错误是另一个人的按预期工作

于 2015-06-05T17:15:32.103 回答
-1

此检查的一种更短且标准化的方法

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M )

这也是安卓开发者推荐的官方代码。

http://developer.android.com/training/basics/supporting-devices/platforms.html

于 2015-12-26T04:58:03.607 回答