Android编程的新手。尽管我进行了所有搜索,但我找不到如何在Android Studio中编写SDK指定的代码块。
例如,据我所知,根据目标SDK版本,有不同类型的通知。
我想将 minSDKversion 保持在尽可能低的水平(我的情况为 9),但我还想为更高版本的 SDK 创建 3 个不同的函数,以支持像这样的现代类型通知:
createNotificationForSKD9(String msg) {
//code to show older-type notification for API level 9
}
createNotificationForSKD16(String msg) {
//code to show notification for API level 16
}
createNotificationForSKD21(String msg) {
//code to show newer-type notification for API level 21
}
但是当我这样做时,Android Studio 会出现编译错误,因为我的 minSDKlevel 已设置为 9,但我为 9 以上的 SDK 版本编写了一些代码。
那么,有什么解决方法呢?
谢谢。
只需检查Build.VERSION.SDK_INT在设备上提供API版本:
if (Build.VERSION.SDK_INT >= 21) {
//code to show newer-type notification for API level 21+
} else if (Build.VERSION.SDK_INT >= 19) {
//code to show newer-type notification for API level 19+
} else if {Build.VERSION.SDK_INT >= 9) {
//code to show newer-type notification for API level 9+
} else {
//code for api lower than 9
}
为了更好的可读性,我将使用版本代码,而不是9
、19
、21
:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
...
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
...
} else if {Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
...
} else {
//code for api lower than 9
}
编辑
这是我从 Android Studio 收到编译错误的地方,因为我的 minSDK版本设置为 9,但我针对更高的 API 级别编写了代码
您最有可能认为的编译错误实际上是 Lint(扫描代码以查找潜在问题的工具)输出(请参阅有关 Lint 的文档)。但这不是严格的编译错误,您的构建过程在这里失败的原因是因为它默认配置为该错误(可以使用 gradle 文件进行更改 - 见下文)。
为了让 Lint 满意,请添加@TargetApi(NN)
注释,其中 NN
代表您针对代码的 API 版本。这会告诉 Lint 你知道不匹配,但你是故意这样做的:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void functionForLollipop() {
..
}
如果删除注释,lint 在检查代码时会改用清单最小 SDK API 级别设置,因此这就是它抱怨的原因。
为了使 Lint 不中止构建,请添加:
lintOptions {
abortOnError false
}
到您的build.gradle
(在android
块中)。
您要查看的是放在每个方法之前的@TargetApi(int)
注释。 此注释的作用是告诉 Android Studio 此方法是为大于或等于提交的 API 版本构建的。 这不会阻止您调用这些方法,也不会防止在低于支持的 api 级别调用这些方法时崩溃。 它只会在 IDE 中生成一条警告,指出"您确定要在不检查的情况下调用它吗?
所以设置将是这样的:
public void createNotification(String msg) {
if(Build.VERSION.SDK_INT >= 21) {
createNotificationForSDK21(msg);
} else if (Build.VERSION.SDK_INT >= 16) {
createNotificationForSDK16(msg);
} else if {Build.VERSION.SDK_INT >= 9) {
createNotificationForSDK9(msg);
} else {
// not supported
}
}
@TargetApi(9)
public void createNotificationForSDK9(String msg) {
//code to show older-type notification for API level 9
}
@TargetApi(16)
public void createNotificationForSDK16(String msg) {
//code to show notification for API level 16
}
@TargetApi(21)
public void createNotificationForSDK21(String msg) {
//code to show newer-type notification for API level 21
}