web-dev-qa-db-fra.com

Comment afficher une boîte de dialogue à partir d'un service

J'ai lu vraiment beaucoup de messages sur ce sujet, mais rien ne fonctionne pour moi (ou n'a pas l'effet que je souhaite).

J'ai une application, qui après la connexion démarre un service en arrière-plan (implémentation de la classe Service). Ce service se synchronise avec un serveur et si une nouvelle commande arrive, il crée une notification.

Jusqu'à présent, tout fonctionne très bien, j'ai la notification et le message Toast. Cependant, je voudrais avoir une boîte de dialogue, qui informe l'utilisateur de la nouvelle commande.

Si j'ai bien compris, vous pouvez démarrer une activité à partir du service, qui affiche la boîte de dialogue. Cela fonctionne, mais l'activité commence au-dessus de la pile d'activités actuelle et affiche la boîte de dialogue. J'ai une activité sans vue attachée et elle affiche correctement la boîte de dialogue, cependant, sur un fond noir.

Ce que je veux, c'est afficher la boîte de dialogue sur l'activité en cours, ce qui fait que l'arrière-plan réel (l'activité en cours) s'estompe et affiche la boîte de dialogue.

Est-ce possible?

Merci, Filip

49
Filip Majernik

Je recommande fortement, fortement, FORTEMENT de NE PAS le faire (cela va à l'encontre de Android design and UI guidelines). Les notifications sont le moyen préféré d'accomplir ce que vous faites (ce qui semble être si vous avez déjà accompli).

Cela étant dit, si vous devez le faire, je recommanderais simplement d'utiliser une activité sur le thème Dialogue. De cette façon, vous n'avez pas besoin d'ouvrir une boîte de dialogue distincte. Veuillez consulter http://developer.Android.com/guide/topics/ui/themes.html#ApplyATheme pour savoir comment procéder.

44
Justin Breitfeller

Nous ne pouvons afficher la boîte de dialogue du service que s'il s'agit d'une boîte de dialogue d'alerte système. Alors, définissez TYPE_SYSTEM_ALERT paramètre de disposition de fenêtre dans la boîte de dialogue comme suit:

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

Mais, il a besoin de l'autorisation SYSTEM_ALERT_WINDOW. N'oubliez donc pas d'ajouter cette autorisation dans le fichier Manifest.

<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/>
112
chakrapani

vous pouvez commencer par apprendre à créer une activité qui ressemble à une boîte de dialogue (pas de barre de titre, fond transparent, effet "flottant", etc.) et non, vous ne pouvez pas simplement démarrer une boîte de dialogue sans activité

4
josephus

Vous ne pouvez pas afficher de dialogue. Mais vous pouvez suivre la voie alternative en gonflant votre vue personnalisée afin d'afficher une boîte de dialogue à l'écran lorsque certaines conditions sont remplies.

1
Sandeep

Non, vous ne pouvez pas détourner une activité qui n'est pas "la vôtre" et lui commander d'afficher la boîte de dialogue. Votre approche pour démarrer votre propre activité est la plus classique.

0
Ognyan