2017-10-24 3 views
0

私のAndroidプロジェクトでは、minSdkVersion19targetSdkVersion26にマニフェストファイルで設定されています。 Javaファイルの一つで私は2つの異なるAPIのは、Androidの現在のバージョンをチェックするためにif文を使用して使用してアラームをスケジュール:Android LintフラグNewAPIエラーが発生しない場所

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); 
    } 
} 

今リントは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' 
    } 
} 

は、この種の状況に対処するための良い方法はありますか?

答えて

1

私は異なるAPIのバージョンの2つの異なるメソッドを1つの方法で混合しているので、エラーが発生すると思います。

次のことが可能です。

  • 使用@SuppressLint( "NewApi")あなたのscheduleAlarm法上の注釈

または

内のコードから移動条件の場合と@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); 
} 
+0

はい、これはsug質問に酔った。 –

関連する問題