如何确定应用程序是否在 Android M 上 运行(开发者预览版)
How to determine if an app is running on Android M (Developer Preview)
注意:这个问题是针对 Android M 开发者预览版提出的,而不是官方 Android 6.0.
android.os.Build.VERSION.SDK_INT returns 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 的黑客攻击。
真的有两个问题:
- 最干净的方法是什么?
- 这是一个错误还是应该是这样的?
What's the cleanest way to do this?
UPDATE: Google 代码示例显示不同
选项:"MNC".equals(Build.VERSION.CODENAME)
。
就个人而言,I'm looking at PREVIEW_SDK_INT
, if it exists:
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决定多玩几局(比如改Build.VERSION.RELEASE
),我觉得这个方法会更稳定。
Is this a bug or is this supposed to be like that?
此检查的更短且标准化的方法
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M )
这也是Android开发者推荐的官方代码
http://developer.android.com/training/basics/supporting-devices/platforms.html
注意:这个问题是针对 Android M 开发者预览版提出的,而不是官方 Android 6.0.
android.os.Build.VERSION.SDK_INT returns 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 的黑客攻击。
真的有两个问题:
- 最干净的方法是什么?
- 这是一个错误还是应该是这样的?
What's the cleanest way to do this?
UPDATE: Google 代码示例显示不同
选项:"MNC".equals(Build.VERSION.CODENAME)
。
就个人而言,I'm looking at PREVIEW_SDK_INT
, if it exists:
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决定多玩几局(比如改Build.VERSION.RELEASE
),我觉得这个方法会更稳定。
Is this a bug or is this supposed to be like that?
此检查的更短且标准化的方法
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M )
这也是Android开发者推荐的官方代码
http://developer.android.com/training/basics/supporting-devices/platforms.html