onReceiver de BroadcastReceiver pas appelé, AlarmManager
Je suis la construction d'une cabine de réservation d'application, j'ai besoin actuel emplacement de la cabine toutes les 20 secondes.
J'ai défini un AlarmManager avoir besoin de le répéter toutes les 20 secondes. Mais ce n'est pas de se répéter régulièrement. Au lieu de cela il s'est répétée après 233 secondes, et seulement une fois. Ce que je fais mal ici ?
Mon écran d'accueil dispose d'un intérieur de classe OnAlarmReceiver, dans le onCreate de ma page d'accueil je fais appel AlarmManager
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, OnAlarmReceiver.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 20);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
cal.getTimeInMillis(), God.UPDATE_PENDING_INTERVAL, pi);
Intérieur de la classe dans l'écran d'accueil
public class OnAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//PullPendingRequests.acquireStaticLock(context);
Toast.makeText(context, "Don't panik but your time is up!!!!.", Toast.LENGTH_LONG)
.show();
Log.d("Taxeeta:PullPendingRequets", "CallService Location");
context.startService(new Intent(context, PullPendingRequests.class));
}
}
Mon fichier AndroidManifest a
<service
android:name="com.taxeeta.support.PullPendingRequests"
android:enabled="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar" />
<receiver android:name=".com.taxeeta.HomeScreen.OnAlarmReceiver" />
</application>
Sortie de adb shell dumpsys alarm
com.taxeeta
51471ms running, 5248 wakeups
5248 alarms: flg=0x4 cmp=com.taxeeta/.HomeScreen$OnAlarmReceiver
Sortie de adb shell dumpsys alarm | grep taxeeta
ELAPSED_WAKEUP #7: Alarm{409303b0 type 2 com.taxeeta}
operation=PendingIntent{408ba2d8: PendingIntentRecord{40887be8 com.taxeeta broadcastIntent}}
com.taxeeta
5248 alarms: flg=0x4 cmp=com.taxeeta/.HomeScreen$OnAlarmReceiver
Vous devez vous connecter pour publier un commentaire.
Pour le fixer, j'ai supprimé l'intérieur de la classe OnAlarmReceiver et fixe les androidmanifest.xml fichier.
Si la réponse ci-dessus ne fonctionne pas pour vous, alors il ya une autre façon de pas recevoir des rappels lorsque
AlarmManager
les feux de l'expiration de l'alarme. Vous avez simplement besoin de vérifier celui-ci dehors: par l'envoi d'un mauvaisIntent
sur l'instanciation dePendingIntent
. Par exemple, vous avez voulu vous recevez un appelonReceive
sur l'un de vos récepteurs mais vous instancié unPendingIntent
viagetActivity
ougetService
, mais ce que vous avez réellement dire c'estgetReceiver
.Lors de la création de l'instance de
PendingIntent
, il existe de nombreuses façons de le créer (getService
,getActivity
,getReceiver
,getForegroundService
:si vous voulez
Activity
le récepteur de l'intention, alors vous:si vous voulez
BroadcastReceiver
le récepteur de l'intention:si vous voulez un avant-plan
Service
le récepteur de l'intention:si vous voulez un
Service
le récepteur de l'intention:Aussi, assurez-vous d'intentions sont de montrer la bonne classe. (par exemple, la création d'intentions pour l'Activité, le Service, etc.). Vous pas recevoir un appel si vous passez à tort comme ceci:
J'ai aussi posté similaire réponse ici.
HTH
Ce morceau de code a fonctionné pour moi et assurez-vous que vous avez ajouté récepteur dans le fichier manifeste android.
Les solutions ci-dessus ne fonctionne pas pour moi.
En outre, l'enregistrement de manière dynamique via le code a fait le tour: