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

Tom*_*Tom 14 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();        
      }

    }
  );

}  
Run Code Online (Sandbox Code Playgroud)

给出错误:

说明资源路径位置类型调用需要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的活动.)

Dar*_*rd5 27

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

但是您用来检查版本的内容在API 9下无效(并且您自API 8以来一直在支持).

你应该使用:

if (Build.VERSION.SDK_INT > 9) { 
Run Code Online (Sandbox Code Playgroud)

或者有问题的功能是API 11,检查"SDK_INT> 10"

然后对于eclipse中的lint错误,按照人们注释,禁用lint错误或将@SuppressLint("NewAPi")或目标添加到该函数11.

  • 你可以使用`Build.VERSION_CODES`常量来与SDK版本而不是硬代码进行比较:`if(Build.VERSION.SDK_INT> Build.VERSION_CODES.GINGERBREAD){}` (2认同)