Открытие локального 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);
Обычно хотя бы одна из двух работ.
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);