如何使用 SDK 指定的代码块



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
}

为了更好的可读性,我将使用版本代码,而不是91921

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
}

相关内容

  • 没有找到相关文章

最新更新