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

С Android 2.XI может использовать решение

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

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

Открытие локального файла HTML с помощью браузера Android

но с 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

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

3 ответа

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

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

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

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

Uri uri = Uri.parse(url);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(browserIntent);
Другие вопросы по тегам