Wie funktioniert der Alarm Manager, wenn sich Android 6.0 im Doze-Modus befindet?

Ich bin Entwickler von zwei Wecker-Apps bei Google Play. Ich versuche, sie mit Android 6.0 zum Laufen zu bringen. Im Doze-Modus klingelt es jedoch nicht. Ich habe sie auf die Whitelist gesetzt, ich habe ein Benachrichtigungssymbol für den Vordergrund angezeigt, ich bin nicht sicher, was ich sonst noch tun kann - im Dösen-Modus werden die Alarme des Alarm-Managers immer noch ignoriert. Die Uhr-App (bei der es sich nicht um eine AOSP-App, sondern um eine Google Play-App handelt) ist jedoch anders. Wenn der Alarm in der Clock-App aktiviert ist, lautet "adb deviceidle step" immer "active" und niemals "idle", "idle_pending" oder etwas anderes.

Ist Android hier betrogen und gibt seiner eigenen App mehr Power, auch bekannt als. "einen Apfel ziehen"? Werden alle Wecker-Apps auf Google Play funktionsunfähig? Ein bisschen beunruhigt, das sind hochwertige Apps, die jeweils ein Jahr Teilzeit-Entwicklungszeit in Anspruch genommen haben und für mich eine große Einnahmequelle darstellen. Alle Hinweise, wie ich diese zum Laufen bringen könnte, wären eine große Hilfe.

Einstellen der AlarmManager-Absicht:

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

und die ReceiverAlarm-Klasse:

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

und die relevanten Teile der X.alarmMaster.startRingingAlarm () -Methode:

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

inige der Methoden wurden zur leichteren Lesbarkeit inline eingefüg

Antworten auf die Frage(4)

Ihre Antwort auf die Frage