открытие локального html-файла с Android-браузером в Android 3.x

с Android 2.x я мог бы использовать решение

browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity") 

решено в посте:

открытие локального html-файла в браузере Android

но с андроидом 3.2 у меня есть эта ошибка:

Unable to find explicit activity class 
(com.android.browser/com.android.browser.BrowserActivity); 
have you declared this activity in your AndroidManifest.xml?

Я думаю, что класса com.android.browser.BrowserActivity не существует в Android 3.x

Любое решение?


person Jorge Pintos Ruiz    schedule 11.04.2012    source источник
comment
Также видно на Android 4.0.4   -  person Nicolas Raoul    schedule 29.01.2013
comment
@NicolasRaoul, эта проблема решена?   -  person tony m    schedule 06.09.2013


Ответы (2)


Неудовлетворительное решение, но в демонстрационном приложении я альтернативно использовал следующий код:

String url = "content://com.android.htmlfileprovider/sdcard/mydir/myfile.html";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "text/html");
startActivity(intent);

Обычно хотя бы один из двух работает.

https://github.com/nicolas-raoul/OxygenGuide-Android/blob/master/src/org/github/OxygenGuide/MainActivity.java#L69

person Nicolas Raoul    schedule 09.09.2013
comment
В моем Nexus 5 он просто вызывает диалоговое окно, позволяющее мне выбирать из нескольких случайных (по крайней мере, для меня) приложений; такие как Календарь, настройки вызовов, карты и даже Waze. - person D.Ginzbourg; 28.12.2013

intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity")

Откроет любое приложение с именем пакета «com.android.browser». Проблема с этим заключается в том, что в разных версиях Android и разных производителей браузер по умолчанию меняется. Например, устройства Nexus, как правило, поставляются с предустановленным приложением Chrome, которое имеет другое имя пакета.

Unable to find explicit activity class 
(com.android.browser/com.android.browser.BrowserActivity); 
have you declared this activity in your AndroidManifest.xml?

Ошибка, которую вы скопировали, объясняет, что нет приложения с таким именем пакета. browserIntent.setClassName() используется для явного открытия определенного приложения, что означает, что оно не должно предоставлять подсказку с вопросом, какой браузер вы хотели бы использовать.

Если это то, чего вы хотите избежать (всплывающее окно), вы можете проверить, какие браузеры установлены на устройстве, и, возможно, предложить загрузить его, прежде чем делать ссылки активными.

вы также можете использовать код из другого предложения.

String url = "content://com.android.htmlfileprovider/sdcard/mydir/myfile.html";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "text/html");
startActivity(intent);

Это указывает, что вы хотите открыть действие, которое может обрабатывать данные типа «текст/html». Просмотрев его. Это предоставит вам список приложений (различных установленных браузеров) для выбора.

person Michael Kent    schedule 12.01.2015