wake-up-neo.com

Gibt es eine Möglichkeit in Android, das Öffnen eines Links in Chrome zu erzwingen?

Ich teste gerade eine Webapplikation, die mit vielen jQuery-Animationen entwickelt wurde, und wir haben mit dem integrierten Webbrowser eine wirklich schlechte Leistung festgestellt. Beim Testen in Chrome ist die Leistung der Webanwendung unglaublich schneller. Ich frage mich nur, ob es ein Skript gibt, das in Chrome für Android eine Verknüpfung erzwingt, ähnlich wie in iOS.

52
user1607943

Eine elegantere Methode, um dies zu erreichen, besteht darin, die Absicht Intent.ACTION_VIEW wie üblich zu verwenden, aber das Paket com.Android.chrome zur Absicht hinzuzufügen. Dies funktioniert unabhängig davon, ob Chrome der Standardbrowser ist, und stellt genau dasselbe Verhalten sicher, als wenn der Benutzer Chrome aus der Auswahlliste ausgewählt hätte.

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

Aktualisieren

Für Kindle-Geräte:

Für den Fall, dass Sie den Amazon Default Browser öffnen möchten, falls die Chrome App nicht in Amazon Kindle installiert ist

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);
}
58
Martin

Es gibt zwei Lösungen.

Nach Paket

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

Nach Schema

    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
    }

WARNUNG! Die folgende Technik funktioniert nicht auf den neuesten Versionen von Android Es ist hier als Referenz, denn diese Lösung gibt es schon eine Weile:

    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
    }
41
philippe_b

Alle vorgeschlagenen Lösungen funktionieren für mich nicht mehr. Dank @pixelbandito wies er mich in die richtige Richtung. Ich habe die nächste Konstante in den Chromquellen gefunden

public static final String GOOGLECHROME_NAVIGATE_PREFIX = "googlechrome://navigate?url=";

Und die nächste Verwendung:

 Intent intent = new Intent("Android.intent.action.VIEW", Uri.parse("googlechrome://navigate?url=chrome-native://newtab/"));

Die Lösung ist also (beachten Sie, dass die URL nicht codiert sein sollte)

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);
    }
}
8
httpdispatch

Dies funktioniert in Firefox und Opera

document.location = 'googlechrome://navigate?url=www.example.com/';

6
Tim Smith

In Anbetracht der Antwort von @ philippe_b möchte ich hinzufügen, dass dieser Code nicht funktioniert, wenn Chrome nicht installiert ist. Es gibt einen weiteren Fall, in dem dies nicht funktioniert. Dies ist der Fall, wenn Chrome NICHT als Standardbrowser ausgewählt ist (aber installiert ist) OR, auch wenn kein Browser als Standard ausgewählt ist.

Fügen Sie in solchen Fällen auch den folgenden catch-Teil des Codes hinzu.

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

2
user1406716

Hier ist das nächste, was ich gefunden habe: Wenn Sie eine URL schreiben und http durch googlechrome ersetzen, wird Chrome geöffnet, die angegebene URL scheint jedoch nicht zu öffnen. Ich arbeite mit einem Samsung Galaxy S5, Android 5.0

Das ist das Beste, was ich gefunden habe - jede andere Lösung, die ich unter SO gesehen habe, erfordert eine Android-App und keine Webapp.

2
pixelbandito

In Google Play gibt es eine Vielzahl von Chrome-Browser-Apps mit unterschiedlichen Funktionen

Es ist also richtig, alle zu überprüfen

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()
    }
}
0
V. Kalyuzhnyu

Wenn Sie eine Fehlermeldung bezüglich der TAG-Konstante erhalten, fügen Sie diesen Code der Aktivität hinzu.

private static final String TAG = "MainActivity";
0

Die verschiedenen Antworten oben sind gut, aber keine ist vollständig. Das hat mir am besten gefallen, was wird:

versuchen Sie, den Chrome-Webbrowser zu öffnen. In Ausnahmefällen (Chrome ist nicht standardmäßig oder nicht installiert) werden Sie aufgefordert, den Browser des Benutzers auszuwählen:

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"));
                }
0
Tushar Seth