Wie öffne ich eine URL aus Code im integrierten Webbrowser und nicht in meiner Anwendung?
Ich habe es versucht:
try {
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
startActivity(myIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "No application can handle this request."
+ " Please install a webbrowser", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
aber ich habe eine Ausnahme:
No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Antworten:
Versuche dies:
Das funktioniert gut für mich.
Was das fehlende "http: //" betrifft, würde ich einfach so etwas machen:
Ich würde wahrscheinlich auch Ihren EditText vorab ausfüllen, dass der Benutzer eine URL mit "http: //" eingibt.
quelle
http://
Schema enthält. Die angezeigte Ausnahme deutet darauf hin, dass Ihrer URL das Schema fehlt.if (!url.startsWith("http://") && !url.startsWith("https://"))
ist ein häufiger Fehler, der Sie zu URLs wie file: // führen und einige gute Anwendungsfälle unterbrechen kann. Versuchen Sie, uri mit der URI-Klasse zu analysieren, und überprüfen Sie, ob ein Schema vorhanden ist. Wenn nein, fügen Sie "http: //";)resolveCheck
. Siehe die offiziellen Dokumente : Achtung: Wenn auf dem Gerät keine Apps vorhanden sind, die die implizite Absicht empfangen können, stürzt Ihre App ab, wenn sie startActivity () aufruft. Um zunächst zu überprüfen, ob eine App zum Empfangen der Absicht vorhanden ist, rufen Sie resolveActivity () für Ihr Intent-Objekt auf.Ein üblicher Weg, dies zu erreichen, ist der nächste Code:
das könnte in eine Kurzcodeversion geändert werden ...
oder :
der kürzeste! ::
Viel Spaß beim Codieren!
quelle
Einfache Antwort
Sie können das offizielle Beispiel von Android Developer sehen .
Wie es funktioniert
Bitte werfen Sie einen Blick auf den Konstruktor von
Intent
:Sie können die
android.net.Uri
Instanz an den zweiten Parameter übergeben, und basierend auf der angegebenen Daten-URL wird eine neue Absicht erstellt.Rufen Sie dann einfach
startActivity(Intent intent)
an, um eine neue Aktivität zu starten, die mit der Absicht mit der angegebenen URL gebündelt ist.Benötige ich die
if
Scheckanweisung?Ja. Die Dokumentation sagt:
Bonus
Sie können beim Erstellen der Intent-Instanz wie folgt in eine Zeile schreiben:
quelle
In 2.3 hatte ich besseres Glück mit
Der Unterschied besteht in der Verwendung von
Intent.ACTION_VIEW
anstelle des Strings"android.intent.action.VIEW"
quelle
Versuche dies:
oder wenn Sie möchten, dass der Webbrowser in Ihrer Aktivität geöffnet wird, gehen Sie wie folgt vor:
Wenn Sie die Zoomsteuerung in Ihrem Browser verwenden möchten, können Sie Folgendes verwenden:
quelle
Wenn Sie dem Benutzer einen Dialog mit allen Browserlisten anzeigen möchten, damit er die bevorzugte auswählen kann, finden Sie hier einen Beispielcode:
quelle
http
oder Äther beginnen kannhttps
, und in Java ist es eine gute Praxis, 'magische Zeichenfolgen' als Konstanten zu deklarieren.context.startActivity
. Sehr nützlich, wenn Sie es von einer externen KlasseGenau wie die Lösungen, die andere geschrieben haben (die gut funktionieren), möchte ich das Gleiche beantworten, aber mit einem Tipp, den die meisten meiner Meinung nach lieber verwenden würden.
Wenn Sie möchten, dass die App, die Sie öffnen, unabhängig von Ihrer eigenen Aufgabe in einer neuen Aufgabe geöffnet wird, anstatt auf demselben Stapel zu bleiben, können Sie diesen Code verwenden:
Es gibt auch eine Möglichkeit, die URL in benutzerdefinierten Chrome-Registerkarten zu öffnen . Beispiel in Kotlin:
quelle
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
ist veraltetandere Option Beim Laden der URL in derselben Anwendung mithilfe von Webview
quelle
Sie können auch diesen Weg gehen
In XML:
Im Java-Code:
Vergessen Sie im Manifest nicht, die Internet-Berechtigung hinzuzufügen ...
quelle
Mit Webview können Sie die URL in Ihre Anwendung laden. Die URL kann vom Benutzer in der Textansicht angegeben oder fest codiert werden.
Vergessen Sie auch nicht die Internetberechtigungen in AndroidManifest.
quelle
Eine Kurzcode-Version ...
quelle
Fügen Sie in Ihrem Try-Block den folgenden Code ein. Android Intent verwendet den Link direkt in den URI-Klammern (Uniform Resource Identifier), um den Speicherort Ihres Links zu identifizieren.
Sie können dies versuchen:
quelle
Einfache und bewährte Methode
Methode 1:
Methode 2:
quelle
context!!.packageManager
stattgetPackageManager()
in aFragment
.quelle
quelle
Die Antwort von MarkB ist richtig. In meinem Fall verwende ich Xamarin und der Code für C # und Xamarin lautet:
Diese Informationen stammen von: https://developer.xamarin.com/recipes/android/fundamentals/intent/open_a_webpage_in_the_browser_application/
quelle
Benutzerdefinierte Chrome-Registerkarten sind jetzt verfügbar:
Der erste Schritt ist das Hinzufügen der Support-Bibliothek für benutzerdefinierte Registerkarten zu Ihrer build.gradle-Datei:
Und dann, um eine benutzerdefinierte Chrome-Registerkarte zu öffnen:
Für weitere Informationen: https://developer.chrome.com/multidevice/android/customtabs
quelle
Basierend auf der Antwort von Mark B und den Kommentaren unten:
quelle
android.webkit.URLUtil
hat die MethodeguessUrl(String)
perfekt funktioniert (auch mitfile://
oderdata://
) seitApi level 1
(Android 1.0). Benutzen als:Im Aktivitätsaufruf:
Überprüfen Sie den vollständigen
guessUrl
Code für weitere Informationen.quelle
Okay, ich habe jede Antwort überprüft, aber welche App hat eine Verknüpfung mit derselben URL, die der Benutzer verwenden möchte?
Heute habe ich diesen Fall bekommen und die Antwort ist
browserIntent.setPackage("browser_package_name");
z.B :
Vielen Dank!
quelle
Einfache Website-Ansicht über Absicht,
Verwenden Sie diesen einfachen Code, um Ihre Website in der Android App anzuzeigen.
Internetberechtigung in Manifestdatei hinzufügen,
quelle
Dieser Fehler ist aufgrund einer ungültigen URL aufgetreten. Android OS kann keine Aktionsansicht für Ihre Daten finden. Sie müssen also überprüfen, ob die URL gültig ist oder nicht.
quelle
Ich denke das ist das Beste
Fügen Sie den folgenden Code in die globale Klasse ein
quelle
Auf diese Weise wird eine Methode verwendet, mit der Sie einen beliebigen String eingeben können, anstatt eine feste Eingabe zu haben. Dies spart einige Codezeilen, wenn sie mehrmals verwendet werden, da Sie nur drei Zeilen benötigen, um die Methode aufzurufen.
Mit dieser Methode ist sie universell einsetzbar. Die IT muss nicht in eine bestimmte Aktivität eingeordnet werden, da Sie sie folgendermaßen verwenden können:
Wenn Sie es außerhalb einer Aktivität starten möchten, rufen Sie einfach startActivity für die Aktivitätsinstanz auf:
Wie in diesen beiden Codeblöcken zu sehen ist, gibt es eine Nullprüfung. Dies ist, da es null zurückgibt, wenn es keine App gibt, die die Absicht handhabt.
Diese Methode verwendet standardmäßig HTTP, wenn kein Protokoll definiert ist, da es Websites gibt, die kein SSL-Zertifikat haben (was Sie für eine HTTPS-Verbindung benötigen), und diese funktionieren nicht mehr, wenn Sie versuchen, HTTPS zu verwenden, und es nicht vorhanden ist . Jede Website kann weiterhin auf HTTPS umsteigen, sodass Sie auf beiden Seiten bei HTTPS landen
Da diese Methode externe Ressourcen zum Anzeigen der Seite verwendet, müssen Sie die INternet-Berechtigung nicht deklarieren. Die App, die die Webseite anzeigt, muss dies tun
quelle
// OnClick Listener
// Ihre Util-Methode
quelle
Gehen Sie einfach mit einer kurzen, um Ihre URL im Browser zu öffnen:
quelle
Die Kotlin-Antwort:
Ich habe eine Erweiterung hinzugefügt
Uri
, um dies noch einfacher zu machenAls Bonus gibt es hier eine einfache Erweiterungsfunktion, mit der Sie einen String sicher in Uri konvertieren können.
quelle
Ich habe lange danach gesucht, weil alle anderen Antworten die Standard-App für diesen Link öffneten, aber nicht den Standardbrowser, und genau das wollte ich.
Ich habe es endlich geschafft:
context
Übrigens können Sie feststellen, was auch immer, da ich dies für eine statische util-Methode verwendet habe. Wenn Sie dies in einer Aktivität tun, wird es nicht benötigt.quelle
Überprüfen Sie, ob Ihre URL korrekt ist. Für mich gab es einen unerwünschten Platz vor der URL.
quelle
Versuchen Sie dies .. Für mich gearbeitet!
XML-Code: -
--------- ODER------------------
quelle