如何只在某个API级别上执行代码

时间:2013-03-19 14:59:02

标签: android

例如,这段代码:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) {

  myCalendarView.setOnDateChangeListener(
    new OnDateChangeListener() {

      @Override
      public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        Toast.makeText
        (
          getApplicationContext(), ""+dayOfMonth, 0
        ).show();        
      }

    }
  );

}  

给出错误:

  

描述资源路径位置类型调用需要API级别11   (当前分钟为8):   android.widget.CalendarView #setOnDateChangeListener example.java / example / src / com / example / example line   20 Android Lint问题

我理解为什么编译时会出现此错误。但有没有办法将源Java类标记为仅用于某个API级别-11?或者使用定义/类似的环绕代码块,以便代码仅在API级别11以上的设备上进行后期绑定/ jitted?达到我想要的最佳解决方案是什么? (这是为了在设备上提供CalendarView的活动。)

2 个答案:

答案 0 :(得分:25)

我不确定这是否能解决你的问题,

但您使用的检查版本在API 9下无效 (自API 8以来,您一直在支持。)

您应该使用:

if (Build.VERSION.SDK_INT > 9) { 

或者,由于有问题的功能是API 11,请检查“SDK_INT> 10”

然后对于eclipse上的lint错误,做人们评论,禁用lint错误或将@SuppressLint(“NewAPi”)或目标添加到该函数为11。

答案 1 :(得分:0)

对于任何后来遇到这个问题的人来说,在运行时根据 API 版本有条件地执行代码目前是支持不同平台版本的有效方式。 请参阅:https://developer.android.com/training/basics/supporting-devices/platforms#version-codes

它说的是:

<块引用>

Android 在 Build 中为每个平台版本提供唯一代码 常量类。在您的应用中使用这些代码来构建条件 确保执行依赖于更高 API 级别的代码 仅当这些 API 在系统上可用时。

并举例:-

Java:

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

科特林:

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}