2011-08-10 6 views
7

Estoy tratando de enviar la intención al navegador para abrir el archivo local. Deseo usar el navegador predeterminado para abrir este archivo.Cómo iniciar el navegador para abrir el archivo local

if(file.exists()){ 
    Log.d(TAG, "file.exists"); 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file)); 
    context.startActivity(intent); 
} 

Pero yo y excepcion

08-10 13:27:58.993: ERROR/AndroidRuntime(28453): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/release_notes.htm } 

lanza si uso siguiente explorador intención abre google.com como se esperaba

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com")); 

también cuando escribo el archivo url (file:///sdcard/release_notes.htm) de direcciones del navegador bar lo abre como se esperaba.

Respuesta

4

Necesita agregar la categoría navegable en el intento.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file)); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
startActivity(intent); 
+5

Parece que no ayuda '08-10 14: 03: 48.414: ERROR/AndroidRuntime (29612): android.content.ActivityNotFoundException: No se ha encontrado actividad para manejar Intent {act = android.intent.action.VIEW cat = [android.intent.category.BROWSABLE] dat = file: ///sdcard/release_notes.htm} ' – roose

+0

hmm, raro, no parece tener ningún problema con esto en mi teléfono :(- compruebe que su sdcard no está montado en una computadora cuando intenta esto. – Zharf

+2

quizás podría intentar agregar el nombre de clase del navegador explícitamente a la intención: 'intent.setClassName (" com.android.browser "," com.android.browser.BrowserActivity "); ' – Zharf

7

El navegador se inició solo para HTML y otros archivos compatibles. Esto debería funcionar:

Intent intent = new Intent(ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "text/html"); 
+0

Funciona también. ¡Gracias! – roose

+0

¡Genial! funciona a las mil maravillas :) – evya

1

Tal vez esto funciona:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "text/html"); 
startActivity(intent); 
6

Esto es lo que funciona para mí. Tomé el tipo de mimo directamente desde el Manifest.xml del navegador predeterminado de Android. Aparentemente, la mímica text/html es solo para http (s) y esquemas en línea.

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setDataAndType(Uri.fromFile(filePath), "application/x-webarchive-xml"); 
startActivity(intent); 

No estoy seguro si funciona en todos los teléfonos Android combinación// navegador, pero es la única manera de conseguir que funcione.

Editar: Probado con Chrome y no funciona. Tampoco funciona con mi dispositivo 2.3.3. Parece que funciona con el navegador predeterminado en Android 4.0.

0

El problema es que la nueva actividad no tiene acceso a la página html dentro de su aplicación, ya que es una aplicación diferente y no tiene permisos para hacerlo.

0

Este código funciona tanto en API API 10 y 11.

File f = new File("/mnt/sdcard/index.html"); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setDataAndType(Uri.fromFile(f), "application/x-webarchive-xml"); 
// Have to add this one in order to work on Target 2.3.3 (API 10) 
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); 
startActivity(intent); 
2

Aquí hay un enfoque ligeramente más robusto:

private void openInBrowser(File file) { 
    final Uri uri = Uri.fromFile(file); 
    try { 
     final Intent browserIntent = new Intent(Intent.ACTION_VIEW); 
     browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); 
     browserIntent.setData(uri); 
     startActivity(browserIntent); 
    } catch (ActivityNotFoundException e) { 
     final Intent browserIntent = new Intent(Intent.ACTION_VIEW); 
     browserIntent.setDataAndType(Uri.fromFile(file), "text/html"); 
     startActivity(browserIntent); 
    } 
} 

He probado esto en un Nexus One (API 16, 4,1 .2), donde funciona el try, y un Nexus 5 (API 22, 5.1.1), donde solo funciona el catch.

Cuestiones relacionadas