Android编程的新功能。尽管我所有的搜索,我都找不到如何在Android Studio中编写SDK指定的代码块。
例如,据我所知,到目前为止,根据目标SDK版本,会有不同类型的通知。
我想保持minSDKversion尽可能低(我的情况为9)但我还想为更高版本的SDK创建3个不同的函数,以支持这样的modernest类型通知:
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版本编写了一些代码。
那么,解决方法是什么?
谢谢你们。
答案 0 :(得分:4)
只需检查提供设备API版本的post:
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
我会使用Build.VERSION.SDK_INT,以提高可读性:
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收到编译错误的地方,因为我的minSDKversion设置为9,但是我编写了针对更高API级别的代码
您最有可能将编译错误视为Lint(工具扫描您的代码以查找潜在问题)输出(version codes)。但它不是严格的编译错误,而且你的构建过程失败的原因是因为它默认配置为(可以使用gradle文件更改 - 见下文)。
要使Lint高兴添加@TargetApi(NN)
注释,其中NN
代表您要定位代码的API版本。这会告诉Lint你知道存在不匹配但是你是故意这样做的:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void functionForLollipop() {
..
}
如果删除注释,lint会在检查代码时使用manifest min SDK API级别设置,这就是它抱怨的原因。
要使Lint不中止构建添加:
lintOptions {
abortOnError false
}
到build.gradle
(android
区)。
答案 1 :(得分:0)
您要查看的内容是您在每个方法之前放置的@TargetApi(int)
注释。此注释的作用是告诉Android Studio此方法是为大于或等于提交的API版本的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
}