2011-08-10 47 views
7

Próbuję wysłać zamiar do przeglądarki, aby otworzyć lokalny plik. Chcę użyć domyślnej przeglądarki, aby otworzyć ten plik.Jak uruchomić przeglądarkę, aby otworzyć lokalny plik

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

Ale to rzuca mnie i exeption

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 } 

jeśli mogę użyć następujących zamiaru otwiera przeglądarkę google.com jak oczekiwano

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

także wtedy, gdy piszę ten URL pliku (file:///sdcard/release_notes.htm) do adresu przeglądarki pasek otwiera to zgodnie z oczekiwaniami.

Odpowiedz

4

Musisz dodać kategorię do przeglądania w zamierzeniu.

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

Wygląda na to, że nie pomaga '08-10 14: 03: 48.414: BŁĄD/AndroidRuntime (29612): android.content.ActivityNotFoundException: Nie znaleziono żadnej aktywności do obsługi Intent {act = android.intent.action.VIEW cat = [android.intent.category.BROWSABLE] dat = file: ///sdcard/release_notes.htm} ' – roose

+0

hmm, dziwne, nie mam żadnych problemów z tym na moim telefonie :(- sprawdź dokładnie, czy sdcard nie jest podłączony do komputera, gdy próbujesz tego.) – Zharf

+2

może możesz spróbować dodać nazwę klasy przeglądarki wprost do intencji: 'intent.setClassName (" com.android.browser "," com.android.browser.BrowserActivity "); ' – Zharf

7

Przeglądarka jest uruchamiana tylko dla HTML i innych kompatybilnych plików. to powinno działać:

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

Działa również. dzięki! – roose

+0

Świetnie! To działa jak urok :) – evya

1

Może to działa:

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

To, co działa dla mnie. Wziąłem typ mime bezpośrednio z Manifest.xml domyślnej przeglądarki Androida. Wygląda na to, że mime text/html jest tylko dla http (s) i inline scheme.

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

Nie wiem, czy działa w każdym połączeniu android/telefon/przeglądarka, ale jest to jedyny sposób, w jaki mogę go uruchomić.

Edytuj: Testowane przy użyciu chrome i nie działa. Również nie działa z moim urządzeniem 2.3.3. Wygląda na to, że działa z domyślną przeglądarką w systemie Android 4.0.

0

Problem polega na tym, że nowe działanie nie ma dostępu do strony html w aplikacji, ponieważ jest to inna aplikacja i nie ma do tego uprawnień.

0

Ten kod działa zarówno na 10 i API API 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

Oto slighly bardziej solidne podejście:

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

Przetestowałem to na Nexus One (API 16, 4,1 .2), gdzie działa try, oraz Nexus 5 (API 22, 5.1.1), w którym działa tylko catch.

Powiązane problemy