Подтвердить что ты не робот

Есть ли способ в Android заставить открыть ссылку для открытия в Chrome?

В настоящее время я тестирую веб-приложение, разработанное с использованием множества jQuery-анимаций, и мы заметили очень низкую производительность встроенного веб-браузера. Во время тестирования в Chrome производительность веб-приложения невероятно выше. Мне просто интересно, существует ли какой-либо тип сценария, который бы принудительно открывал ссылку в Chrome для Android, аналогично тому, как это делалось в iOS.

4b9b3361

Ответ 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";