如何使用SDK指定的代码块

时间:2016-04-25 17:56:36

标签: android android-studio-2.0

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版本编写了一些代码。

那么,解决方法是什么?

谢谢你们。

2 个答案:

答案 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
}

而不是91921我会使用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.gradleandroid区)。

答案 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
}