setAlarmClock() не работает в режиме дозо для некоторых устройств, таких как телефоны OPPO

В моем приложении мне нужно установить будильники, и когда они срабатывают, я пытаюсь вызвать их в моем приемнике.

Для работы с режимом Dozo из Marshmallow 6.0, если версия устройства больше или равна 6.0, я использую метод alarmManger.setAlarmClock(). Это отлично работает почти на всех устройствах, кроме устройств OPPO.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(fireDate.getTime(), pendingIntent);
            alarmManager.setAlarmClock(alarmClockInfo, pendingIntent);
            //alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, fireDate.getTime(), pendingIntent);
        } else {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, fireDate.getTime(), pendingIntent);
        }

================================================== ==================== из Терминала я получил логи, используя: adb shell dumpsys alarm.

1. для других брендов (результат метода моего приложения alarmManager.setAlarmClock()):

    Batch{b778e8c num=1 start=35988972 end=35988972 flgs=0x3}:
    RTC_WAKEUP #0: Alarm{b9e89d5 type 0 when 1547501400600 ######.######}
    tag=*walarm*:######.######.Reminder
            type=0 whenElapsed=+9h49m0s741ms when=2019-01-15 03:00:00
    window=0 repeatInterval=0 count=0 flags=0x3
    Alarm clock:
    triggerTime=2019-01-15 03:00:00
    showIntent=PendingIntent{3dc5ea: PendingIntentRecord{d66ec2a ######.###### broadcastIntent}}
    operation=PendingIntent{996c0db: PendingIntentRecord{d66ec2a ######.###### broadcastIntent}}

пакет уникален, а значение флага установлено на 0x3, так оно и будет для alarmClocks. Для большинства брендов результат такой же, но в противоположном случае флаг установлен на 0x8

2. для телефона oppo (результат моего приложения alarmManager.setAlarmClock()):

    Batch{b778e8c num=1 start=35988972 end=35988972 flgs=0x8}:
    RTC_WAKEUP #0: Alarm{b9e89d5 type 0 when 1547501400600 ######.######}
    tag=*walarm*:######.######.Reminder
            type=0 whenElapsed=+9h49m0s741ms when=2019-01-15 03:00:00
    window=0 repeatInterval=0 count=0 flags=0x8
    Alarm clock:
    triggerTime=2019-01-15 03:00:00
    showIntent=PendingIntent{3dc5ea: PendingIntentRecord{d66ec2a ######.###### broadcastIntent}}
    operation=PendingIntent{996c0db: PendingIntentRecord{d66ec2a ######.###### broadcastIntent}}

3. для телефона OPPO (приложение для будильника по умолчанию OPPO):

    Batch{3450b8d num=1 start=464582537 end=464582537 flgs=0x9}:
    RTC_WAKEUP #0: Alarm{32536c5 type 0 when 1547690400000 ######.###### whenElapsed 464582537 windowLength 0 maxWhenElapsed 464582537 repeatInterval 0 action }
    tag=*walarm*:######.######.ALARM_ALERT
            type=0 whenElapsed=+17h4m45s187ms when=2019-01-17 07:30:00
    window=0 repeatInterval=0 count=0 flags=0x9
    Alarm clock:
    triggerTime=2019-01-17 07:30:00
    showIntent=PendingIntent{ee6881a: PendingIntentRecord{97c18f0 ######.###### startActivity (whitelist: 902f275:+30s0ms)}}
    operation=PendingIntent{3bc0f4b: PendingIntentRecord{2bd8d28 ######.###### broadcastIntent}}

Внутри телефонов OPP для получения сигналов тревоги это должен быть один пакет, а флаг должен быть установлен на 0x9

Вывод

ДРУГИЕ телефоны: flag = 0x3 требуется для срабатывания сигнализации, alarmManager.setAlarmClock() устанавливает флаг = 0x3, работает нормально.

Телефоны OPPO: для активации сигнала тревоги требуется флаг =0x9. Но alarmManager.setAlarmClock() устанавливает флаг = 0x8.

Какой метод я должен вызвать, чтобы установить флаг =0x9 на устройствах oppo?

0 ответов

Другие вопросы по тегам