2011-01-06 4 views
0

Was ich erstellen möchte, ist ein Popup-Stil-Anwendung.Android Popup-Stil Aktivität, die oben auf alle anderen Anwendungen

Ich habe einen Dienst im Hintergrund - etwas kommt in die Warteschlange und ich möchte eine Aktivität starten, um den Benutzer zu informieren - sehr sehr ähnlich der Funktionalität der SMSPopup App.

So habe ich den Code, wo etwas in der Warteschlange ankommt und es ruft meine Aktivität.

Aus irgendeinem Grund wird die Aktivität jedoch immer über der ursprünglich gestarteten Aktivität angezeigt, anstatt nur auf dem Hauptdesktop des Android-Geräts angezeigt zu werden.

Als Beispiel:

Ich habe die Haupttätigkeit, die, wenn gezeigt wird die Anwendung

läuft habe ich den Dienst, die Warteschlange

prüft ich ein Popup-Aktivität haben.

Wenn ich die Hauptaktivität starte, startet es den Dienst - ich kann jetzt schließen.

Ich habe dann etwas in der Warteschlange und es schafft die Popup-Aktivität, die mit dem Pop-up auf die er die Haupttätigkeit startet: S Wie verhindere ich das und habe es sich verhalten, wie ich will ...

die Pop-up-Klasse ist:




public class SMSPopup extends Activity implements OnClickListener{ 

public static String msg; 


@Override 
public void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
// Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); 
    this.setContentView(R.layout.popup); 
    TextView tv = (TextView)findViewById(R.id.txtLbl); 
    Intent intent = getIntent(); 
    if (intent != null){ 
     Bundle bb = intent.getExtras(); 
     if (bb != null){ 
      msg = bb.getString("com.andy.tabletsms.message"); 
     } 
    } 

    if(msg == null){ 
    msg = "LOLOLOL"; 
    } 
    tv.setText(msg); 

    Button b = (Button)findViewById(R.id.closeBtn); 
    b.setOnClickListener(this); 
} 


@Override 
public void onClick(View v) { 
    this.finish(); 
} 
} 




und ich rufe die Aktivität von einem Rundfunkempfänger, der die Warteschlange alle 30 Sekunden oder so überprüft:


    if(main.msgs.size()>0){ 

     Intent testActivityIntent = new Intent(context.getApplicationContext(), com.andy.tabletsms.work.SMSPopup.class); 
    testActivityIntent.putExtra("com.andy.tabletsms.message", main.msgs.get(0)); 
    testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(testActivityIntent); 

     } 

das Layout ist hier: 01.236.

+0

Was ist "main" (wie in main.msgs.get (0)) und wo ist es? – Squonk

+0

Es ist eine Arraylist, die Strings enthält .... nicht wirklich auf das Problem bezogen :) – RenegadeAndy

+0

Sie sagen also - "... startet die Hauptaktivität mit dem Popup darüber". Wurde die Hauptaktivität "wirklich" gestartet? Mit anderen Worten, wenn Sie die ZURÜCK-Taste drücken, verschwindet die Popup-Aktivität und Sie sehen die Hauptaktivität. Oder hat die Popup-Aktivität einen Hintergrund mit der gleichen Titelleiste wie die Hauptaktivität, sodass sie wie die Hauptaktivität aussieht? – Squonk

Antwort

3

Dies ist gegen die Design-Praxis von Android vorgeschlagen. Siehe http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Hintergrunddienst sollte nie eine Aktivität starten auf seinem eigenen, um Interaktion mit dem Benutzer zu empfangen.

Sie können die Nachricht in einem Toast und/oder einer Benachrichtigung anzeigen. Aus der Benachrichtigung können Sie eine neue Absicht starten.

+0

Nun, viele Apps machen es - und es ist die Art der Benachrichtigung, die ich für meine Anwendung benötige - und es ist nur für mich selbst bestimmt - also liegt es an mir! – RenegadeAndy

+0

Und wenn ich "Dienst" sage, ist es kein Dienst wie von RenegadeAndy

+0

ok. Ich verstehe es. Ich denke du hast einen Thread. Und Sie möchten, dass der Thread auch dann ausgeführt wird, wenn die Aktivität nicht im Vordergrund steht. Recht? Wenn das stimmt, habe ich versucht, das zu tun. Ich schlage vor, die Kontrolle auf einen Dienst zu übertragen (echter Dienst ...nicht thread), wenn der Benutzer auf eine Schaltfläche/Aktion klickt. Wenn der Dienst ein Fenster öffnen muss, können Sie entweder eine Benachrichtigung und/oder einen Toast erstellen. Auch .. (wenn du es wirklich wünschst) könntest du eine Aktivität vom selben Ort starten (obwohl es gegen Android-Empfehlung ist). – GSree