2010-01-27 8 views
17

Je me demandais si quelqu'un peut dire si faire apparaître un écran de dialogue sur un écran Android natif?Android - Comment afficher une boîte de dialogue sur un écran natif?

J'ai actuellement une application qui piège un appel sortant et l'arrête, je veux alors faire apparaître une boîte de dialogue qui prendrait le relais de l'écran de numérotation et alerter l'utilisateur que la tentative d'appel a été bloquée et leur permettre quelques nouvelles options de la boîte de dialogue.

Je sais que certaines personnes vont dire que je devrais utiliser des notifications à la place mais je suis conscient de cela et ce n'est pas la façon dont cela devrait fonctionner, je dois être capable de faire apparaître une boîte de dialogue lorsque l'appel est piégé.

Ceci est mon code de dialogue jusqu'à

AlertDialog LDialog = new AlertDialog.Builder(context) 
    .setTitle("Call Blocked") 
    .setMessage("Call Blocked, reroute call?") 
    .setPositiveButton("ok", null).create(); 
     LDialog.show(); 

Je suppose que je dois faire en quelque sorte le contexte à celle de l'écran de numérotation?

Quelqu'un peut-il offrir de l'aide et de l'aide ou des liens vers des tutoriels?

Merci à l'avance

Répondre

56

Pour mon application, j'ai utilisé une activité sur le thème Dialog. Vous pouvez déclarer le thème dans le fichier manifeste:

<activity android:name="PopupActivity" 
    android:launchMode="singleInstance" android:excludeFromRecents="true" 
    android:taskAffinity="" android:theme="@android:style/Theme.Dialog" /> 
  • utilisation launcheMode="singleInstance" et taskAffinity="" si votre pop-up est détaché de votre application principale. Sinon, l'utilisateur peut cliquer sur le bouton de retour et revenir à l'activité précédente de votre application.
  • excludeFromRecents="true" pour éviter que votre pop-up à apparaître dans les tâches récentes (maison de presse longue)
  • theme="@android:style/Theme.Dialog" pour définir le thème de dialogue.
+3

Merci Thomas, c'est une excellente solution –

+0

Excellente solution, merci! M'a sauvé beaucoup de temps! – mDroidd

+0

Je t'aime littéralement tbruyelle! ajouter le taskAffinity = "" a résolu le problème qui m'embêtait depuis si longtemps! – Daksh

4

Comment obtenir l'équivalent de launchMode = singleTask dans le code

Je ne l'ai pas vu une explication claire de la façon de définir ces drapeaux programme, alors je vais inclure mes résultats ici. tldr: vous devez définir FLAG_ACTIVITY_NEW_TASK et FLAG_ACTIVITY_MULTIPLE_TASK.

Si vous lancez cette opération directement à partir de votre application, votre boîte de dialogue apparaîtra en plus de la dernière activité de votre application. Mais si vous utilisez une diffusion PendingIntent par AlarmManager pour lancer votre "boîte de dialogue", vous avez le temps de passer à une application différente afin que vous puissiez voir que votre "boîte de dialogue" apparaîtra sur cette autre application, si le style est correctement défini est derrière.

De toute évidence, il convient de savoir quand il est approprié d'afficher une boîte de dialogue au-dessus d'autres applications.

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

// you have to set these flags here where you receive the broadcast 
// NOT in the code where you created your pendingIntent 
    Intent scheduledIntent = new Intent(context, AlertAlarmActivity.class); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    context.startActivity(scheduledIntent); 
Questions connexes