Использование библиотеки поддержки AlarmManagerCompat - PullRequest
0 голосов
/ 13 мая 2018

Если используется класс AlarmManagerCompat библиотеки поддержки android.support.v4.app.AlarmManagerCompat, можно ли вызывать Alarm с помощью приведенного ниже единственного синтаксиса (который будет применим ко всем устройствам, независимо от установленного уровня API,Библиотека поддержки, обеспечивающая обратную совместимость для всех предыдущих версий API):

alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);

Или еще нужно сначала проверить уровень API, установленный на устройстве, а затем вызвать Alarm, используя соответствующий синтаксис на основеиспользуемый уровень API, например:

        if (VERSION.SDK_INT >= 23) {
            alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntentMain);
            // Adding manual re-scheduling for repetition
        }
        else if (VERSION.SDK_INT >= 19) {
            alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntentMain);
            // Adding manual re-scheduling for repetition
        }
        else if (VERSION.SDK_INT <= 18) {
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 60 * 60 * 24 * 7 * 1000, alarmIntentMain);
        }

Насколько я понимаю, библиотеки поддержки имеют возможность использовать более поздние классы со старыми версиями API без необходимости писать разные синтаксисы.одной и той же функциональности для разных API.Правильно ли мое понимание?

Спасибо.J

1 Ответ

0 голосов
/ 13 мая 2018

Глядя на исходный код для AlarmManagerCompat , он выполняет именно те проверки уровня API, которые вы указали:

public static void setExactAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type,
        long triggerAtMillis, @NonNull PendingIntent operation) {
    if (Build.VERSION.SDK_INT >= 23) {
        alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
    } else {
        AlarmManagerCompat.setExact(alarmManager, type, triggerAtMillis, operation);
    }
}

public static void setExact(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis,
        @NonNull PendingIntent operation) {
    if (Build.VERSION.SDK_INT >= 19) {
        alarmManager.setExact(type, triggerAtMillis, operation);
    } else {
        alarmManager.set(type, triggerAtMillis, operation);
    }
}

Таким образом, вы можете использовать AlarmManagerCompat, не беспокоясь об уровнях API.

...