Android 8.0 Oreo AlarmManager avec récepteur de radiodiffusion ou implicite de la diffusion de l'interdiction

J'ai critique des rappels qui sont définies par l'intermédiaire de l'Alarme Manager (Il doit fonctionner de la même façon qu'un réveil demande).

Auparavant, j'avais de la suite dans mon Manifeste Android:

    <receiver android:name="com.example.app.AlarmReceiver" >
        <intent-filter>
            <action android:name="${packageName}.alarm.action.trigger"/>
        </intent-filter>
    </receiver>

Le récepteur de radiodiffusion:

public class AlarmReceiver extends BroadcastReceiver {

  @Override public void onReceive(
      final Context context,
      final Intent intent) {
//WAKE LOCK
//BUILD NOTIFICATION etc...
  }

}

Comment l'alarme est activée:

final PendingIntent operation = PendingIntent.getBroadcast(
          mContext,
          requestCode,
          intent,
          PendingIntent.FLAG_CANCEL_CURRENT);

      if (PlatformUtils.hasMarshmallow()) {
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);

      } else {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
      }
}

Avec Android 8.0 je ne peux plus utiliser implicite de diffusion tel que défini dans le Manifeste. C'est bien, l'alternative est donné pour enregistrer manuellement comme suit:

final BroadcastReceiver receiver = new AlarmReceiver();
final IntentFilter intentFilter = new IntentFilter(ALARM_RECEIVER_INTENT_TRIGGER);
context.registerReceiver(receiver, intentFilter);

Cela ne semble pas logique pour moi.

  1. Le récepteur d'alarme sera liée à la durée de vie du contexte. Cela provoque un problème lorsque dire que l'application est tué à cause de la pression de mémoire ou lorsque l'appareil est redémarré. J'ai besoin de mon alarmes à feu à chaque fois qu'ils sont essentiels pour la santé de l'utilisateur.

  2. Même si j'écoute de la "android.l'intention.d'action.BOOT_COMPLETED" et enregistrer mon récepteur d'alarme de l'application est tué peu de temps après, et aucune alarme n'est déclenchée. Aussi, je ne vois pas mon alarme via

    adb shell dumpsys alarme

Comment puis-je créer un récepteur de radiodiffusion qui reçoit un implicite de diffusion pour déclencher une alarme tout en ciblant Android O (8.0)? Quelqu'un peut-il m'éclairer avec un exemple de code ou un lien vers la documentation. Comment en temps Opportun ou de tout autre réveil application de la fonction tout en ciblant O?

InformationsquelleAutor ViciDroid | 2017-09-19