2011-02-03 16 views
5

Tengo problemas para hacer que esto funcione, aquí hay una visión general de la idea.Android Lanzar o traer al frente otra aplicación a través de la intención

En primer lugar, no puedo cambiar la lógica detrás de esto, era un requisito específico del cliente, me doy cuenta de que con cualquier herramienta como AnyCut podría pasarse por alto, pero eso no importa realmente.

Mi cliente ofrece un conjunto de aplicaciones, la idea es que todas las aplicaciones de la suite se inicien desde una "Aplicación de tablero", para que solo muestre la aplicación Dashboard en el iniciador principal y no todos los iconos de la aplicación.

Permite tomar dos aplicaciones para resolver la idea. La aplicación Dashboard (A) y la aplicación Recieving (B).

Quiero establecer un filtro de intenciones (creo) en la aplicación B para que cada vez que vaya a la aplicación A, y haga clic en el ícono de la aplicación B, la aplicación se inicie o se inicie desde donde dejó (traído al frente)

¿Esto es posible? Si es así, ¿cómo puedo hacerlo? He conseguido que le permite lanzar el lanzamiento de una actividad específicamente en la aplicación usando:

Intent i = new Intent(); 
i.setClassName("PACKAGE_NAME","SPECIFIC_CLASS"); 
startActivity(i); 

Pero eso no es el comportamiento que yo quiero, ya que siempre se inicia aplicación B en el mismo lugar.

Gracias de antemano, Stefano

Editar: Se ha añadido nueva información. Estaba echando un vistazo al DDMS.

Si ejecuto la aplicación desde cero a través del iniciador principal de Android, la intención es exactamente la misma que cuando dejo el botón de inicio presionado y luego solo traigo la aplicación al frente, independientemente de la actividad. Intenté reproducir, sin éxito hasta ahora, este intento.

INFO/ActivityManager(1292): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.package/.uiPackage.Activity} 

Esta es la forma en que lo hace AnyCut

Intent { act=android.intent.action.VIEW flg=0x10000000 cmp=com.example.package/.uiPackage.Activity bnds=[125,242][235,360]} 

alguna idea de cómo podría ir sobre la creación de esa exactamente la misma intención? Ni siquiera puedo encontrar esa bandera en la API de intención.

Respuesta

6

Lo descubrí, así es como lo hice.

Intent i = new Intent(); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.setAction("android.intent.action.VIEW"); 
i.setComponent(ComponentName.unflattenFromString("com.example.package/com.example.package.activityName")); 
startActivity(i); 
+0

Esto es interesante. ¿Esto realmente lo llevará de vuelta a donde lo dejó en las aplicaciones secundarias lanzadas desde la aplicación principal (tablero de instrumentos)? Si es así, ¡esto es bueno para saber! – ice911

+0

@ ice911 Hace exactamente lo que describes, parece que Android pone la aplicación en el estado en que se encontraba. Probé esto en el emulador, un nexo uno a g2 y una pestaña de galaxia y funciona en todos ellos. Me refiero a 'activityName' como el que está marcado como principal en el Manifiesto. – blindstuff

+0

Increíble. Funciona de maravilla. –

0

No estoy muy seguro de que estoy siguiendo los resultados esperados que desea ver, pero lo siguiente sería lanzar la aplicación desde el tablero de instrumentos y retire el panel de control de la pila actividad salir de la aplicación en ejecución seleccionado:

Intent i = new Intent(); 
i.setClassName("PACKAGE_NAME","SPECIFIC_CLASS"); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 

Creo que esto debería iniciar la aplicación como si estuviera iniciando otra aplicación.

Por favor, agrega más información sobre su lógica si esto no es lo que está buscando.

+0

No es exactamente lo que estoy buscando Disculpa, me gustaría no especificar la clase que quiero abrir, solo invoco la otra aplicación en la actividad que haya dejado. – blindstuff

+0

Me gustaría que el usuario pueda usar la aplicación, pero, por ejemplo, cuando hace clic en el inicio, vuelva al panel y continúe usando la aplicación donde estaba. – blindstuff

+1

'en lugar de invocar a la otra aplicación en cualquier actividad que haya dejado' Eso no es realmente cómo funciona Android – Falmarri

0

creo que cuando se cambia actividades acción predeterminada de Android es ordenar de pausa o mantener la actividad en su estado el usuario lo dejó en el pasado. Sé que hay una manera de hacerlo para que el estado no se guarde al cambiar de actividades, pero no puedo recordarlo en la parte superior de mi cabeza.

Cuestiones relacionadas