gpt4 book ai didi

java - Android Lint 在不应该的地方标记 NewAPI 错误

转载 作者:行者123 更新时间:2023-12-02 12:06:02 24 4
gpt4 key购买 nike

在我的 Android 项目中,我在 list 文件中将 minSdkVersion 设置为 19targetSdkVersion 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'
}
}

有没有更好的方法来处理这种情况?

最佳答案

我认为您收到错误是因为您在一个方法中混合了针对不同 api 版本的两种不同方法。

你可以:

  • 在您的 ScheduleAlarm 方法上使用 @SuppressLint("NewApi") 注释

移出 if 条件内的代码并使用 @TargetApi(n) 注释

private void scheduleAlarm(AlarmManager alarmManager, long targetTime, PendingIntent pendingIntent, Intent intent) {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Lollipop is version 21
// Code for versions after Lollipop
alarmLaterLollipop();
}
else {
// Code for older versions
alarmBeforeLollipop();
}
}

@TargetApi(Build.VERSION_CODES.M)
private void alarmLaterLollipop(){
logAlarm(targetTime, pendingIntent, intent, "Lollipop");
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(targetTime, pendingIntent),pendingIntent);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void alarmBeforeLollipop(){
logAlarm(targetTime, pendingIntent, intent, "Kitkat");
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetTime, pendingIntent);
}

关于java - Android Lint 在不应该的地方标记 NewAPI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46906986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com