2012-10-11 30 views
8

Aquí está el panorama:formas de llevar una aplicación para Android en segundo plano a plano

AndroidManifest.xml define una única actividad con android:launchMode="singleTask". (Esto significa que debe haber una sola actividad en la pila durante todo el ciclo de vida de la aplicación, ¿no?)

Durante Activity.onCreate(), un receptor de difusión se crea mediante programación y escucha SMS entrantes. El receptor permanece activo incluso después de Activity.onPause()por diseño.

Cuando el usuario finaliza la aplicación, presiona el botón de inicio del dispositivo que llama al Activity.onPause() y la aplicación desaparece. El dispositivo muestra luego la pantalla de inicio de Android.

Tras la recepción de SMS, los receptores de radiodifusión recibe SMS y trata de mostrar la actividad a través de:

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); 

Sin embargo, la actividad no se presentaron para el usuario.

  • a) ¿Por qué?
  • b) ¿Cuáles son las formas posibles de llevar una actividad a primer plano?
+1

No está claro cuál es el problema. ¿La actividad no está en primer plano? Hay un choque? –

+0

@tencent: edité mi publicación. Sí, la actividad NO está llegando al primer plano. Sin accidente. –

Respuesta

17

En MyMainActivity definición (AndroidManifest.xml):

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

mediante programación con lo que la aplicación de conocimientos adquiridos:

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) no funcionaría cuando el context objeto es lo mismo que la actividad que uno quiere sacar.

1

Sí, lo que usted dice es correcto, tiene un BroadcastReciever y activa un intento de su actividad para ponerlo en primer plano. Sin embargo, tenga cuidado con el ciclo de vida de la actividad.

Android OS puede llevar su actividad de onPause() a onStop() y onDestroy() según los recursos del sistema. Entonces, en tal caso, su actividad de llamada se reiniciará nuevamente, así que tome precauciones allí. Lo demás, muy fácil de ejecutar en NullPointerExceptions

Cuestiones relacionadas