it-swarm.com.de

Wie kann ich in meiner Anwendung eine URL in einem Android-Webbrowser öffnen?

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
1246
Arutha

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.

2311
Mark B

ein üblicher Weg, dies zu erreichen, ist mit dem nächsten Code:

String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url)); 
startActivity(i); 

das könnte in eine Kurzcode-Version geändert werden ...

Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));      
startActivity(intent); 

oder :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")); 
startActivity(intent);

der kürzeste! :

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));

fröhliches Codieren!

79
Jorgesys

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"

54
MikeNereson

Einfache Antwort

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

Wie es funktioniert

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.

Benötige ich die Check-Anweisung 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.

Bonus

Sie können beim Erstellen der Intent-Instanz wie folgt in eine Zeile schreiben:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
50
itiskj

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);
30
nikki

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 :)

}
22
Dmytro Danylyk

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

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");
17
Sanket

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 ...

12
Aristo Michael

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;
    }
}
9
Gorav Sharma

Eine kurze Codeversion ...

 if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
     strUrl= "http://" + strUrl;
 }


 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
6
Jorgesys

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);
6
Kanwar_Singh
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
4
Pradeep Sodhi
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);
3
TheOddAbhi

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/

3

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

3
francisco_ssb

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*/
    }
2
Umasankar

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" /> 
2
stacktry

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

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

    }
1
Faakhir
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.

1
Mayur Sojitra

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

1
Zoe

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.

1
I.G. Pascual

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);
    }
1
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;
    }
}
0
Tuan Nguyen

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:

  1. erhalten der Manifest Berechtigungen
  2. überzählige Leerzeichen zwischen url
  3. Überprüfen Sie Ihre RLs richtig oder nicht
0
ballu

Überprüfen Sie, ob Ihre URL korrekt ist. Für mich gab es ein unerwünschtes Leerzeichen vor der URL.

0

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);
0
Debasish Ghosh

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!

0
Vaibhav Kadam

Versuchen Sie dieses OmegaIntentBuilder

OmegaIntentBuilder.from(context)
                .web("Your url here")
                .createIntentHandler()
                .failToast("You don't have app for open urls")
                .startActivity();
0
T. Roman