【发布时间】:2017-10-24 09:34:41
【问题描述】:
在我的 Android 项目中,我在清单文件中将 minSdkVersion 设置为 19 和 targetSdkVersion 26。在其中一个 Java 文件中,我使用两个不同的 API 使用 if 语句来检查当前 Android 版本来安排警报:
private void scheduleAlarm(AlarmManager alarmManager, long targetTime, PendingIntent pendingIntent, Intent intent) {
if(VersionCheckUtils.isLollipopOrLater()) { // Lollipop is version 21
// Code for versions after Lollipop
logAlarm(targetTime, pendingIntent, intent, "Lollipop");
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(targetTime, pendingIntent),
pendingIntent);
}
else {
// Code for older versions
logAlarm(targetTime, pendingIntent, intent, "Kitkat");
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetTime, pendingIntent);
}
}
现在 Lint 不分析 if 语句并报告此错误:
NewApi: Calling new methods on older versions
../../src/main/java/org/bee/beezone/trafficcontrol/AlarmScheduler.java:61: Call requires API level 21 (current min is 19): android.app.AlarmManager#setAlarmClock
您如何处理这种情况?代码实际上应该是安全的,但 Android lint 似乎不理解这一点。
最后,我通过将这些行添加到 gradle 构建文件中来停用“NewApi”检查:
android {
...
lintOptions {
disable 'NewApi'
}
}
有没有更好的方法来处理这种情况?
【问题讨论】: