Как заставить Alarm Manager работать, когда Android 6.0 в режиме Doze?

Я разработчик двух приложений будильника в Google Play. Я пытаюсь заставить их работать с Android 6.0. Тем не менее, режим Doze делает так, чтобы они не звонили. Я помещаю их в белый список, я помещаю значок уведомления переднего плана вверх, я не уверен, что еще я могу сделать - когда в режиме ожидания, сигналы тревоги диспетчера аварий по-прежнему игнорируются. Однако приложение «Часы» (скорее, Google Play, чем приложение AOSP) отличается. Когда будильник включен в приложении «Часы», «adb deviceidle step» всегда будет читать «active» и никогда «idle», «idle_pending» или что-либо еще.

Android обманывает здесь, придавая собственному приложению больше возможностей, иначе. "тянет яблоко"? Все приложения с будильниками в Google Play станут неработоспособными? Как-то здесь беспокоит то, что это качественные приложения, каждое из которых заняло год на неполный рабочий день, и для меня это большой источник дохода. Любые подсказки о том, как я мог заставить их работать, были бы огромной помощью.

Установка намерения AlarmManager:

        Intent intent = new Intent(context, ReceiverAlarm.class);
        if (android.os.Build.VERSION.SDK_INT >= 16) {
            intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        }
        amSender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); //FLAG_CANCEL_CURRENT seems to be required to prevent a bug where the intent doesn't fire after app reinstall in KitKat
        am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, scheduleToTime+1, amSender);

и класс ReceiverAlarm:

public class ReceiverAlarm extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if (wakeLock == null) {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);
        wakeLock.acquire();
    }
    X.alarmMaster.startRingingAlarm(true);
}

и соответствующие части метода X.alarmMaster.startRingingAlarm ():

    if (wakeLock == null) {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);
        wakeLock.acquire();
    }

    if (screenWakeLock == null) {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        screenWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, Theme.appTitle+" scr");
        screenWakeLock.acquire();
    }

    Intent alarmIntent = new Intent(Intent.ACTION_VIEW);
    alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    alarmIntent.setClass(context, ActivityAlarmAlarm.class);

    context.startActivity(alarmIntent);

Некоторые методы были вставлены в строку для удобства чтения.

Ответы на вопрос(2)

Ваш ответ на вопрос