如何确定应用程序是否在Android M上运行(开发者预览版)

时间:2015-06-05 17:02:29

标签: android android-6.0-marshmallow

注意:这个问题是针对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);
}

但这似乎是一个黑客IMO。

实际上有两个问题:

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

2 个答案:

答案 0 :(得分:6)

  

最干净的方法是什么?

更新:Google代码示例显示不同 选项1}}。

就个人而言,I'm looking at PREVIEW_SDK_INT, if it exists

"MNC".equals(Build.VERSION.CODENAME)

这比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),我认为这种方法会更稳定。

  

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

One man's bug is another man's working-as-intended

答案 1 :(得分:-1)

用于此检查的更短且标准化的方法

archive

这也是Android开发者建议的官方代码。

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