Wie öffne ich eine URL über Code im integrierten Webbrowser anstatt 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
Versuche dies:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
Das funktioniert gut für mich.
Was das fehlende "http: //" angeht, würde ich einfach so etwas machen:
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "http://" + url;
Ich würde wahrscheinlich auch Ihren EditText vorbelegen, indem der Benutzer eine URL mit "http: //" eingibt.
String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));
fröhliches Codieren!
In 2.3 hatte ich besseres Glück mit
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);
Der Unterschied ist die Verwendung von Intent.ACTION_VIEW
anstelle der Zeichenfolge "Android.intent.action.VIEW"
Sie sehen das offizielle Beispiel von Android Developer .
/**
* Open a web page of a specified URL
*
* @param url URL to open
*/
public void openWebPage(String url) {
Uri webpage = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
Bitte werfen Sie einen Blick auf den Konstruktor von Intent
:
public Intent (String action, Uri uri)
Sie können die Android.net.Uri
-Instanz an den 2. Parameter übergeben, und basierend auf der angegebenen Daten-URL wird ein neuer Intent erstellt.
Rufen Sie dann einfach startActivity(Intent intent)
auf, um eine neue Aktivität zu starten, die mit der Absicht mit der angegebenen URL gebündelt ist.
if
?Ja. Das docs sagt:
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. Wenn das Ergebnis nicht null ist, gibt es mindestens eine App, die die Absicht verarbeitet, und es ist sicher, startActivity () aufzurufen. Wenn das Ergebnis null ist, sollten Sie die Absicht nicht verwenden und, falls möglich, die Funktion deaktivieren, die die Absicht aufruft.
Sie können beim Erstellen der Intent-Instanz wie folgt in eine Zeile schreiben:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Versuche dies:
Uri uri = Uri.parse("https://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));
oder wenn Sie möchten, dass ein Webbrowser in Ihrer Aktivität geöffnet wird, dann machen Sie das so:
WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);
und wenn Sie die Zoomsteuerung in Ihrem Browser verwenden möchten, können Sie Folgendes verwenden:
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
Wenn Sie dem Benutzer einen Dialog mit der Liste aller Browser anzeigen möchten, damit er den gewünschten auswählen kann, finden Sie hier Beispielcode:
private static final String HTTPS = "https://";
private static final String HTTP = "http://";
public static void openBrowser(final Context context, String url) {
if (!url.startsWith(HTTP) && !url.startsWith(HTTPS)) {
url = HTTP + url;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(Intent.createChooser(intent, "Choose browser"));// Choose browser is arbitrary :)
}
Genau wie die Lösungen, die andere geschrieben haben (die gut funktionieren), möchte ich dasselbe beantworten, aber mit einem Tipp, den die meisten meiner Meinung nach am liebsten verwenden würden.
Wenn Sie möchten, dass die App 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:
final Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);
Es gibt auch eine Möglichkeit, die URL in Chrome Custom Tabs zu öffnen. Beispiel in Kotlin:
@JvmStatic
fun openWebsite(activity: Activity, websiteUrl: String, useWebBrowserAppAsFallbackIfPossible: Boolean) {
var websiteUrl = websiteUrl
if (TextUtils.isEmpty(websiteUrl))
return
if (websiteUrl.startsWith("www"))
websiteUrl = "http://$websiteUrl"
else if (!websiteUrl.startsWith("http"))
websiteUrl = "http://www.$websiteUrl"
val finalWebsiteUrl = websiteUrl
//https://github.com/GoogleChrome/custom-tabs-client
val webviewFallback = object : CustomTabActivityHelper.CustomTabFallback {
override fun openUri(activity: Activity, uri: Uri?) {
var intent: Intent
if (useWebBrowserAppAsFallbackIfPossible) {
intent = Intent(Intent.ACTION_VIEW, Uri.parse(finalWebsiteUrl))
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
if (!CollectionUtil.isEmpty(activity.packageManager.queryIntentActivities(intent, 0))) {
activity.startActivity(intent)
return
}
}
// open our own Activity to show the URL
intent = Intent(activity, WebViewActivity::class.Java)
WebViewActivity.prepareIntent(intent, finalWebsiteUrl)
activity.startActivity(intent)
}
}
val uri = Uri.parse(finalWebsiteUrl)
val intentBuilder = CustomTabsIntent.Builder()
val customTabsIntent = intentBuilder.build()
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
CustomTabActivityHelper.openCustomTab(activity, customTabsIntent, uri, webviewFallback)
}
andere Option In URL in derselben Anwendung mit Webview laden
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
Sie können auch diesen Weg gehen
In xml:
<?xml version="1.0" encoding="utf-8"?>
<WebView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/webView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
Im Java Code:
public class WebViewActivity extends Activity {
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
}
}
Vergessen Sie in Manifest nicht, die Internet-Erlaubnis hinzuzufügen ...
Mit Webview können Sie URLs in Ihre Anwendung laden. Die URL kann vom Benutzer in der Textansicht angegeben oder fest codiert werden.
Vergessen Sie auch nicht die Internet-Berechtigungen in AndroidManifest.
String url="http://developer.Android.com/index.html"
WebView wv=(WebView)findViewById(R.id.webView);
wv.setWebViewClient(new MyBrowser());
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.loadUrl(url);
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
Eine kurze Codeversion ...
if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
strUrl= "http://" + strUrl;
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
Fügen Sie in Ihrem Try-Block den folgenden Code ein. Android Intent verwendet direkt den Link in den URI-Klammern (Uniform Resource Identifier), um die Position Ihres Links zu identifizieren.
Sie können dies versuchen:
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));
startActivity(getWebPage);
Die Antwort von MarkB ist richtig. In meinem Fall verwende ich Xamarin. Der Code für C # und Xamarin lautet:
var uri = Android.Net.Uri.Parse ("http://www.xamarin.com");
var intent = new Intent (Intent.ActionView, uri);
StartActivity (intent);
Diese Informationen stammen aus: https://developer.xamarin.com/recipes/Android/fundamentals/intent/open_a_webpage_in_the_browser_application/
Benutzerdefinierte Chrome-Registerkarten sind jetzt verfügbar:
Der erste Schritt ist das Hinzufügen der Custom Tabs Support Library zu Ihrer build.gradle-Datei:
dependencies {
...
compile 'com.Android.support:customtabs:24.2.0'
}
Und dann, um eine chrome benutzerdefinierte Registerkarte zu öffnen:
String url = "https://www.google.pt/";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));
Für weitere Informationen: https://developer.chrome.com/multidevice/Android/customtabs
einfache und bewährte Methode
Methode 1:
String intentUrl="www.google.com";
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(intentUrl));
if(webIntent.resolveActivity(getPackageManager())!=null){
startActivity(webIntent);
}else{
/*show Error Toast
or
Open Play Store to download browser*/
}
Methode 2:
try{
String intentUrl="www.google.com";
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(intentUrl));
startActivity(webIntent);
}catch (ActivityNotFoundException e){
/*show Error Toast
or
Open Play Store to download browser*/
}
Einfach, Website-Ansicht über Absicht
Intent viewIntent = new Intent("Android.intent.action.VIEW", Uri.parse("http://www.yoursite.in"));
startActivity(viewIntent);
verwenden Sie diesen einfachen Code, um Ihre Website in der App Android anzuzeigen.
Internetberechtigung in Manifestdatei hinzufügen
<uses-permission Android:name="Android.permission.INTERNET" />
Basierend auf der Antwort von Mark B und den Kommentaren unten:
protected void launchUrl(String url) {
Uri uri = Uri.parse(url);
if (uri.getScheme() == null || uri.getScheme().isEmpty()) {
uri = Uri.parse("http://" + url);
}
Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
if (browserIntent.resolveActivity(getPackageManager()) != null) {
startActivity(browserIntent);
}
}
// OnClick Listener
@Override
public void onClick(View v) {
String webUrl = news.getNewsURL();
if(webUrl!="")
Utils.intentWebURL(mContext, webUrl);
}
// Ihre Util-Methode
public static void intentWebURL(Context context, String url) {
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = "http://" + url;
}
boolean flag = isURL(url);
if (flag) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(url));
context.startActivity(browserIntent);
}
}
String url = "https://www.thandroid-mania.com/";
if (url.startsWith("https://") || url.startsWith("http://")) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}else{
Toast.makeText(mContext, "Invalid Url", Toast.LENGTH_SHORT).show();
}
Dieser Fehler ist aufgrund einer ungültigen URL aufgetreten. Das Betriebssystem Android kann die Aktionsansicht für Ihre Daten nicht finden. Sie haben also überprüft, ob die URL gültig ist oder nicht.
Auf diese Weise wird eine Methode verwendet, mit der Sie einen beliebigen String anstelle einer festen Eingabe eingeben können. Das spart einige Codezeilen, wenn es mehrmals verwendet wird, da Sie nur drei Zeilen benötigen, um die Methode aufzurufen.
public Intent getWebIntent(String url) {
//Make sure it is a valid URL before parsing the URL.
if(!url.contains("http://") && !url.contains("https://")){
//If it isn't, just add the HTTP protocol at the start of the URL.
url = "http://" + url;
}
//create the intent
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)/*And parse the valid URL. It doesn't need to be changed at this point, it we don't create an instance for it*/);
if (intent.resolveActivity(getPackageManager()) != null) {
//Make sure there is an app to handle this intent
return intent;
}
//If there is no app, return null.
return null;
}
Mit dieser Methode ist es universell einsetzbar. IT muss nicht in eine bestimmte Aktivität eingeordnet werden, da Sie sie folgendermaßen verwenden können:
Intent i = getWebIntent("google.com");
if(i != null)
startActivity();
Oder wenn Sie es außerhalb einer Aktivität starten möchten, rufen Sie einfach startActivity für die Aktivitätsinstanz auf:
Intent i = getWebIntent("google.com");
if(i != null)
activityInstance.startActivity(i);
Wie in beiden Codeblöcken zu sehen ist, erfolgt eine Nullprüfung. Dies ist, wie es null zurückgibt, wenn es keine App gibt, um die Absicht zu behandeln.
Diese Methode verwendet standardmäßig HTTP, wenn kein Protokoll definiert ist, da es Websites ohne SSL-Zertifikat gibt (was für eine HTTPS-Verbindung erforderlich ist), und diese funktionieren nicht mehr, wenn Sie versuchen, HTTPS zu verwenden, und es ist nicht vorhanden . Jede Website kann weiterhin auf HTTPS umgestellt werden, sodass Sie auf diese Weise auf HTTPS gelandet sind
Da diese Methode zum Anzeigen der Seite externe Ressourcen verwendet, müssen Sie die INternet-Berechtigung nicht deklarieren. Die App, die die Webseite anzeigt, muss dies tun
Android.webkit.URLUtil
hat die Methode guessUrl(String)
funktioniert einwandfrei (auch mit file://
oder data://
) seit Api level 1
(Android 1.0). Benutzen als:
String url = URLUtil.guessUrl(link);
// url.com -> http://url.com/ (adds http://)
// http://url -> http://url.com/ (adds .com)
// https://url -> https://url.com/ (adds .com)
// url -> http://www.url.com/ (adds http://www. and .com)
// http://www.url.com -> http://www.url.com/
// https://url.com -> https://url.com/
// file://dir/to/file -> file://dir/to/file
// data://dataline -> data://dataline
// content://test -> content://test
Im Aktivitätsaufruf:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));
if (intent.resolveActivity(getPackageManager()) != null)
startActivity(intent);
Überprüfen Sie den vollständigen guessUrl
Code für weitere Informationen.
Ich denke das ist das Beste
openBrowser(context, "http://www.google.com")
Fügen Sie den folgenden Code in die globale Klasse ein
public static void openBrowser(Context context, String url) {
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "http://" + url;
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(browserIntent);
}
dataWebView.setWebViewClient(new VbLinksWebClient() {
@Override
public void onPageFinished(WebView webView, String url) {
super.onPageFinished(webView, url);
}
});
public class VbLinksWebClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url.trim())));
return true;
}
}
Grundlegende Einführung:
https: // verwendet diese in den "Code", damit niemand dazwischen sie lesen kann. Dies schützt Ihre Informationen vor Hackern.
http: // verwendet nur den Zweck des Teilens, es ist nicht gesichert.
Über Ihr Problem:
XML-Design:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context="com.example.sridhar.sharedpreferencesstackoverflow.MainActivity">
<LinearLayout
Android:orientation="horizontal"
Android:background="#228b22"
Android:layout_weight="1"
Android:layout_width="match_parent"
Android:layout_height="0dp">
<Button
Android:id="@+id/normal_search"
Android:text="secure Search"
Android:onClick="secure"
Android:layout_weight="1"
Android:layout_width="0dp"
Android:layout_height="wrap_content" />
<Button
Android:id="@+id/secure_search"
Android:text="Normal Search"
Android:onClick="normal"
Android:layout_weight="1"
Android:layout_width="0dp"
Android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
Android:layout_weight="9"
Android:id="@+id/button_container"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:orientation="horizontal">
<WebView
Android:id="@+id/webView1"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
Activity Designing:
public class MainActivity extends Activity {
//securely open the browser
public String Url_secure="https://www.stackoverflow.com";
//normal purpouse
public String Url_normal="https://www.stackoverflow.com";
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(WebView)findViewById(R.id.webView1);
}
public void secure(View view){
webView.setWebViewClient(new SecureSearch());
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadUrl(Url_secure);
}
public void normal(View view){
webView.setWebViewClient(new NormalSearch());
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadUrl(Url_normal);
}
public class SecureSearch extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String Url_secure) {
view.loadUrl(Url_secure);
return true;
}
}
public class NormalSearch extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String Url_normal) {
view.loadUrl(Url_normal);
return true;
}
}
}
Android Manifest.Xml Berechtigungen:
<uses-permission Android:name="Android.permission.INTERNET"/>
Bei der Implementierung treten Probleme auf:
Überprüfen Sie, ob Ihre URL korrekt ist. Für mich gab es ein unerwünschtes Leerzeichen vor der URL.
Versuchen Sie das .. Für mich gearbeitet!
public void webLaunch(View view) {
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setVisibility(View.VISIBLE);
View view1=findViewById(R.id.recharge);
view1.setVisibility(View.GONE);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("<your link>");
}
xml code: -
<WebView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/webview"
Android:visibility="gone"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>
--------- ODER------------------
String url = "";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Okay, ich habe jede Antwort überprüft, aber welche App hat Deep-Linking mit derselben URL, die der Benutzer verwenden möchte?
Heute habe ich diesen Fall und die Antwort ist browserIntent.setPackage("browser_package_name");
e. :
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
browserIntent.setPackage("com.Android.chrome"); // Whatever browser you are using
startActivity(browserIntent);
Danke!
Versuchen Sie dieses OmegaIntentBuilder
OmegaIntentBuilder.from(context)
.web("Your url here")
.createIntentHandler()
.failToast("You don't have app for open urls")
.startActivity();