setAlarmClock () не работает в режиме dozo для нескольких устройств, таких как телефоны OPPO - PullRequest
0 голосов
/ 16 января 2019

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

Для того, чтобы справиться с режимом Dozo из зефира 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.

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 Телефоны: flag = 0x9 требуется, чтобы вызвать его как сигнал тревоги.Но alarmManager.setAlarmClock () устанавливает флаг = 0x8.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...