Comment élever un dialogue alerte de BroadcastReceiver classe?
J'ai utilisé une méthode de minuteur dans un Activity
classe. Dans cette méthode que j'ai l'intention de Activity
classe à un BroadcastReceiver
classe.
Ce BroadcastReceiver
classe fera appel à toutes les 15 minutes en arrière-plan en utilisant AlarmManager
.
Quand je l'appelle la BroadcastReceiver
classe je souhaiterais soulever un AlertDialog
.
public void timerMethod(){
Intent intent = new Intent(Activity.this,
BroadcastReceiverClass.class
);
PendingIntent sender = PendingIntent.getBroadcast(
QualityCallActivity.this,0, intent, 0
);
//We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 60*1000, sender);
}
BroadcastReceiverClass.java
public void onReceive(Context context, Intent intent)
{
dialogMethod();
}
Comment puis-je lève un AlertDialog
de BroadcastReceiver
classe à partir d'un processus en arrière-plan?
OriginalL'auteur prasad.gai | 2011-08-29
Vous devez vous connecter pour publier un commentaire.
En bref: Il est pas possible.
Seulement de l'Activité peut créer/afficher les boîtes de dialogue. En fait, cela a été demandé plus d'une fois:
Aussi, cela donnerait une très mauvaise expérience d'utilisateur:
De jeu) et de votre boîte de Dialogue apparaît toutes les 15 minutes, ce sera très
ennuyeux pour lui.
adapté) les moyens de lui notifier que quelque chose a été exécuté.
Mieux adapté façons
En fait, vous pouvez créer/afficher une
Toast
à partir d'unBroadcastReceiver
. CetteToast
également abeille apparaît lorsque l'utilisateur n'est pas "dans votre application".Vous pouvez également vous envoyer une Notification (indiqué dans la Notification de la Barre en haut de votre écran) à partir d'un
BroadcastReceiver
. Un tutoriel sur la façon de le faire (il ne diffère pas de la façon dont vous le faites dans une Activité, sauf que vous utilisez le passéContext
-Objet à partir de laonReceive
-méthode).La Notification sera affichée lorsque l'utilisateur n'est pas "dans votre application" et de l'est de l'OMI, la meilleure solution à ce problème.
AlertDialog
est la meilleure option, il est assurément possible afin de montrer à partir d'unBroadcastReceiver
. Comme je l'ai souligné dans ma réponse, cela fonctionne si votreBroadcastReceiver
est un intérieur de classe à votre activité. Voir mon jour de réponse pour le code.Mais votre solution ne fonctionne que lorsque le
BroadcastReceiver
est un intérieur de classe de l'Activité et seulement si l'Activité est ouverte lorsque le récepteur est "appelé". Cela se sent un peu hackie et les coutures ne pas être voulu par les développeurs Android. Au lieu de cela, à l'aide d'unToast
ou unNotification
fonctionne très bien sans ces limitations.Comme vous l'avez dit, il peut ne pas être la meilleure option dans de nombreuses situations. Mais cela ne signifie pas qu'il n'y aura jamais un cas où il est le bon choix, il est donc logique de savoir ce que vos options. Donc, je voulais juste être clair qu'il est, en effet, possible, depuis que a sa question.
c'est de bon augure pour la vérification de la connexion réseau. lol
OriginalL'auteur Lukas Knuth
Si votre activité est en cours d'exécution lorsque le BroadcastReceiver obtient l'intention, vous devriez être en mesure d'utiliser
runOnUiThread
d'exécuter une méthode qui crée une AlertDialog, par exemple:Cela fonctionne si vous faites votre BroadcastReceiver intérieure de la classe à votre Activité.
OriginalL'auteur Joel F
1) De L'Activité:
2) Dans
BroadcastReceiver.onReceive
:OriginalL'auteur PhuocLuong