L'alarme Android ne fonctionne pas
J'ai eu du mal avec cela pendant des heures. J'ai également vérifié la documentation et plusieurs sujets. J'ai trouvé ce code dans les deux sujets, les deux gars dit que le code fonctionne parfaitement, mais pas sur mon ordinateur. Le premier Toast s'affiche, mais le deuxième n'a jamais. Quel est le problème?
public class HelloAndroid2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
}
public final class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
}
}
}
source d'informationauteur erdomester
Vous devez vous connecter pour publier un commentaire.
En fait, vous n'avez pas besoin de spécifier l'action puisque vous utilisez la classe
AlarmReceiver.class
dans l'intention.Dans votre
AndroidManifest.xml
assurez-vous d'avoir un récepteur définition dans le<application>
balises, quelque chose comme:<receiver android:name="AlarmReceiver">
Edit:
Ok il y a 2 façons d'utiliser votre récepteur de radiodiffusion.
1) à Partir du code que vous avez fournis,
AlarmReceiver.java
qui contient:et
HelloAndroid2.java
:Comme cela, vous pouvez configurer votre récepteur de radiodiffusion de travailler avec le
AndroidManifest.xml
et la balise<receiver ...>
2)2ème méthode. Avec cette façon, vous pouvez utiliser seulement 1 fichier
HelloWorld2.java
:Dans votre activité, créez votre récepteur de radiodiffusion et de l'enregistrer.
J'ai eu le même problème jusqu'à ce que j'ai trouvé que j'avais mis mon Récepteur de Radiodiffusion sur un autre, ce n'est pas le général.
Simplement changé:
pour:
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: 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