2011-03-30 11 views
13

Mi proyecto es principalmente una aplicación web. Ahora tengo una aplicación de Android con un widget de pantalla de inicio y me gustaría abrir una página web en el navegador integrado en algunas acciones de usuario. Eso es fácil. En MyAppWidgetProvider.onUpdate creo un nuevo intento:Abrir una url en el navegador de Android, evitar varias pestañas

Intent intent = new Intent("android.intent.action.VIEW", 
    Uri.parse("http://my.example.com/")); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
views.setOnClickPendingIntent(R.id.text, pendingIntent); 

Por desgracia, se abre una ventana del explorador/pestaña nueva cada vez que el usuario hace clic en el widget. Mi página contiene algunos sofisticados AJAX/javascript ejecutándose en segundo plano y enviando regularmente solicitudes http. Así que termino teniendo 8 pestañas que contienen la misma página y enviando continuamente 8 veces la cantidad de solicitudes http.

¿Hay alguna manera, por ejemplo,? acción diferente o parámetros adicionales para evitar abrir nuevas pestañas?

Como solución alternativa, ahora estoy pensando en crear una nueva actividad que contenga un WebView, pero me gustaría evitar esta complejidad.

Respuesta

18

Sí, esto es posible. Use http://developer.android.com/reference/android/provider/Browser.html#EXTRA_APPLICATION_ID para asegurarse de que se reutilice la misma pestaña del navegador para su aplicación. Por ejemplo:

Context context = widget.getContext(); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); 
+0

Gracias! ¡EXTRA_APPLICATION_ID ha estado incluso disponible desde API nivel 3 (Android 1.5)! – geekQ

+1

'getPackageName()' funciona parcialmente solo en mi caso (Tablet Android 4.1.1). Lanzó el navegador con la misma pestaña, pero presiona ATRÁS, el navegador no vuelve a la página anterior, simplemente finalízala. Por [esto] (http://stackoverflow.com/questions/9902225/browser-extra-application-id-do-not-work-in-the-tablet-do-you-know-other-work-a/9917548 # 9917548), funciona !!!! – Yeung

+0

Funcionó perfectamente. Usé intent.putExtra (Browser.EXTRA_APPLICATION_ID, getApplicationContext(). GetPackageName()); – zappullae

-1

Según mi leal saber y entender, no hay forma de especificar si se abre una pestaña nueva o no usando Intent. Incluso busqué y no pude encontrar de todos modos para comprobar qué pestañas estaban abiertas. Otra cosa que puede intentar es realizar un seguimiento de si el usuario ha sido enviado recientemente a la actividad del navegador desde su aplicación, y verificar si el navegador todavía está abierto, pero una vez más puedo ver que esto va mal de muchas maneras.

Su idea de actividad probablemente sea una de las mejores en esta situación, aunque puedo entender por qué querría evitar eso.

+0

"Siempre se puede finalizar el proceso del navegador, y eso debería cerrar todas las pestañas, pero dudo que sea la solución ideal". - Eso no es posible, excepto tal vez si su aplicación se ejecuta como root en un teléfono rooteado. – CommonsWare

+0

¿No es posible? Definitivamente es posible terminar una tarea, ¿de qué otro modo podrían existir tantos asesinos de tareas? Ahora lo probé y abrió las mismas pestañas cuando reinicié el navegador, así que esa parte puede no funcionar, pero definitivamente puede finalizar las tareas. –

+0

Lo sentimos, los asesinos de tareas se descolgaron después de Android 2.1. Un proceso no puede matar a otro proceso en las versiones más nuevas de Android. – CommonsWare

Cuestiones relacionadas