我正在为Android编写应用程序,我的应用程序必须在Android 2.2和Android 4.0.3下启动,我想在Android中使用类似#ifdef的东西,但我仍然无法找到我能做到的方式。
Android 4.0.3
if( android.os.Build.VERSION.SDK == 4.0.3)
{
String str = "foo";
boolean b = str.isEmpty();
}
Android 2.2
else {
String str = "foo";
boolean b = str.length() == 0;
}
我不能写这样的代码,因为compilator会给出错误。
你可以建议我做什么?
答案 0 :(得分:3)
你可以建议我做什么?
Java的新手应该在开始Android开发之前花时间学习Java。 4.0.3
不是Java中的有效整数。
相反,你应该使用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
// do something
}
答案 1 :(得分:1)
您只需检查Api Level并调用Build.VERSION.SDK_INT
答案 2 :(得分:1)
#ifdef
用于编译时处理,即使这通常是Java中公认的惯例(但不是,但确实存在支持该概念的第三方工具),它不太可能对您有所帮助,因为您需要对正在运行的环境做出运行时决定(除非您想生成多个包吗?)。
正如链接fabricemarcelin所提供的(http://stackoverflow.com/questions/3506792/android-api-version-programmatically)所述,您可以轻松地确定运行时系统的版本。您需要将应用程序编写到您知道将在运行时存在的API(2.2系统,如果这是您的下限),并且您需要做出关于调用4.0函数的运行时决定。对于4.0功能,您可能需要使用反射来查找API。
我已经利用反射来访问其他东西,只有在较新的Android系统上才能访问,而且效果很好。一个提示是安排在您的应用程序的早期执行反射/ API位置,如果合理,如果没有,至少安排每次调用只执行一次。