2012-10-11 34 views
8

Ecco lo scenario:modi per portare un app Android in fondo al primo piano

AndroidManifest.xml definisce una singola attività con android:launchMode="singleTask". (Ciò significa che ci dovrebbe essere una singola attività nello stack durante l'intero ciclo di vita dell'applicazione, giusto?)

Durante il Activity.onCreate(), un ricevitore di trasmissione viene creato a livello di programmazione e ascolta gli SMS in entrata. Il ricevitore rimane attivo anche dopo Activity.onPause()in base al modello.

Quando l'utente ha terminato l'applicazione, preme il pulsante Home del dispositivo che chiama Activity.onPause() e l'applicazione scompare. Il dispositivo mostra quindi la schermata iniziale di Android.

Alla ricezione di SMS, i riceventi per la radiodiffusione riceve SMS e cerca di mostrare l'attività tramite:

Intent it = new Intent(context, Akami.class); 
it.setAction(Intent.ACTION_MAIN); 
it.addCategory(Intent.CATEGORY_LAUNCHER); 
it.setComponent(new ComponentName(context.getPackageName(), "MyActivity")); 
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(it); 

Tuttavia, l'attività non è mostrato fino a che l'utente.

  • a) Perché?
  • b) Quali sono i modi possibili per portare in primo piano un Activty?
+1

Non è chiaro quale sia il problema. L'attività non sta arrivando in primo piano? C'è un incidente? –

+0

@tencent: ho modificato il mio post. Sì, l'attività NON sta arrivando in primo piano. Nessun incidente. –

risposta

17

In MyMainActivity definizione (AndroidManifest.xml):

<intent-filter> 
<action android:name="intent.my.action" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

programmazione portando applicazione in primo piano:

Intent it = new Intent("intent.my.action"); 
it.setComponent(new ComponentName(context.getPackageName(), MyMainActivity.class.getName())); 
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.getApplicationContext().startActivity(it); 

Nota: context.startActivity(it) non avrebbe funzionato quando il context l'oggetto è uguale all'attività che si vuole far apparire.

1

Sì, quello che stai dicendo è corretto, avere un BroadcastReciever e lanciare un intento alla tua attività per portarlo in primo piano. Parola di cautela riguardo al ciclo di vita dell'Attività.

Il sistema operativo Android può svolgere la propria attività da onPause() a onStop() e onDestroy() in base alle risorse di sistema. In tal caso, l'attività di chiamata verrà riavviata nuovamente, quindi prendi le dovute precauzioni. Altrimenti, molto facile imbattersi in NullPointerExceptions

Problemi correlati