В настоящее время я тестирую веб-приложение, разработанное с использованием множества jQuery-анимаций, и мы заметили очень низкую производительность встроенного веб-браузера. Во время тестирования в Chrome производительность веб-приложения невероятно выше. Мне просто интересно, существует ли какой-либо тип сценария, который бы принудительно открывал ссылку в Chrome для Android, аналогично тому, как это делалось в iOS.
Есть ли способ в Android заставить открыть ссылку для открытия в Chrome?
Ответ 1
Более элегантный способ добиться этого - использовать намерение Intent.ACTION_VIEW
как обычно, но добавить в него пакет com.android.chrome
. Это работает независимо от того, является ли Chrome браузером по умолчанию и обеспечивает точно такое же поведение, как если бы пользователь выбрал Chrome из списка выбора.
String urlString = "http://mysuperwebsite";
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage("com.android.chrome");
try {
context.startActivity(intent);
} catch (ActivityNotFoundException ex) {
// Chrome browser presumably not installed so allow user to choose instead
intent.setPackage(null);
context.startActivity(intent);
}
Обновить
Для устройств Kindle:
На всякий случай, если вы хотите открыть браузер Amazon Default, если приложение chrome не установлено в Amazon Kindle
String urlString = "http://mysuperwebsite";
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage("com.android.chrome");
try {
context.startActivity(intent);
} catch (ActivityNotFoundException ex) {
// Chrome browser presumably not installed and open Kindle Browser
intent.setPackage("com.amazon.cloud9");
context.startActivity(intent);
}
Ответ 2
Существует два решения.
По пакету
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setPackage("com.android.chrome");
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
// Chrome is probably not installed
// Try with the default browser
i.setPackage(null);
startActivity(i);
}
По схеме
String url = "http://www.example.com";
try {
Uri uri = Uri.parse("googlechrome://navigate?url=" + url);
Intent i = new Intent(Intent.ACTION_VIEW, uri);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
} catch (ActivityNotFoundException e) {
// Chrome is probably not installed
}
ПРЕДУПРЕЖДЕНИЕ! Следующий метод не работает в последних версиях Android. Он здесь для справки, потому что это решение было какое-то время:
String url = "http://www.example.com";
try {
Intent i = new Intent("android.intent.action.MAIN");
i.setComponent(ComponentName.unflattenFromString("com.android.chrome/com.android.chrome.Main"));
i.addCategory("android.intent.category.LAUNCHER");
i.setData(Uri.parse(url));
startActivity(i);
}
catch(ActivityNotFoundException e) {
// Chrome is probably not installed
}
Ответ 3
Все предлагаемые решения больше не работают для меня. Благодаря @pixelbandito он указал мне в правильном направлении. Я нашел следующую константу в хромовых источниках
public static final String GOOGLECHROME_NAVIGATE_PREFIX = "googlechrome://navigate?url=";
И следующее использование:
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("googlechrome://navigate?url=chrome-native://newtab/"));
Итак, решение (обратите внимание, что URL-адрес не должен быть закодирован)
void openUrlInChrome(String url) {
try {
try {
Uri uri = Uri.parse("googlechrome://navigate?url="+ url);
Intent i = new Intent(Intent.ACTION_VIEW, uri);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
} catch (ActivityNotFoundException e) {
Uri uri = Uri.parse(url);
// Chrome is probably not installed
// OR not selected as default browser OR if no Browser is selected as default browser
Intent i = new Intent(Intent.ACTION_VIEW, uri);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
} catch (Exception ex) {
Timber.e(ex, null);
}
}
Ответ 4
Это работает в Firefox и Opera
document.location = 'googlechrome://navigate?url=www.example.com/';
Ответ 5
Повторяя ответ на @philippe_b, я хотел бы добавить, что этот код не будет работать, если Chrome не установлен. Существует еще один случай, когда он не будет работать - это тот случай, когда Chrome не выбран в качестве браузера по умолчанию (но установлен) или даже если в качестве значения по умолчанию не выбран ни один браузер.
В таких случаях добавьте следующую часть уловления кода.
try {
Intent i = new Intent("android.intent.action.MAIN");
i.setComponent(ComponentName.unflattenFromString("com.android.chrome/com.android.chrome.Main"));
i.addCategory("android.intent.category.LAUNCHER");
i.setData(Uri.parse("http://mysuperwebsite"));
startActivity(i);
}
catch(ActivityNotFoundException e) {
// Chrome is probably not installed
// OR not selected as default browser OR if no Browser is selected as default browser
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("somesite.com"));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
Ответ 6
Вот ближайший я нашел: Написание url и замена http
на googlechrome
откроет Chrome, но он, похоже, не откроет указанный URL. Я работаю с Samsung Galaxy S5, Android 5.0
Это лучшее, что я нашел - любое другое решение, которое я видел на SO, требует приложения для Android, а не веб-приложения.
Ответ 7
Разные ответы выше хороши, но ни один не полон. Все это подходит мне лучше всего, что будет:
попробуйте открыть веб-браузер Chrome, и в случае возникновения исключительной ситуации (Chrome не установлен по умолчанию или не установлен), запросит выбор браузера у пользователя:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriString));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.setPackage("com.android.chrome");
try {
Log.d(TAG, "onClick: inTryBrowser");
startActivity(intent);
} catch (ActivityNotFoundException ex) {
Log.e(TAG, "onClick: in inCatchBrowser", ex );
intent.setPackage(null);
startActivity(intent.createChooser(intent, "Select Browser"));
}
Ответ 8
В Google Play есть большое разнообразие браузерных приложений Chrome с различными функциями.
Так что правильно проверить их все
fun Context.openChrome(url: String, onError: (() -> Unit)? = null) {
openBrowser("com.android.chrome", url) {
openBrowser("com.android.beta", url) {
openBrowser("com.android.dev", url) {
openBrowser("com.android.canary", url) {
onError?.invoke() ?: openBrowser(null, url)
}
}
}
}
}
fun Context.openBrowser(packageName: String?, url: String, onError: (() -> Unit)? = null) {
try {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
setPackage(packageName)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
})
} catch (e: ActivityNotFoundException) {
onError?.invoke()
}
}
Ответ 9
Если вы получили ошибку о константе TAG, добавьте этот код в действие.
private static final String TAG = "MainActivity";