Hoe kan ik een URL openen in de Android-webbrowser vanuit mijn applicatie?

Hoe open ik een URL van code in de ingebouwde webbrowser in plaats van in mijn applicatie?

Ik heb dit geprobeerd:

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

maar ik heb een uitzondering:

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com

Antwoord 1, autoriteit 100%

Probeer dit:

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

Dat werkt prima voor mij.

Wat betreft de ontbrekende “http://” zou ik zoiets als dit doen:

if (!url.startsWith("http://") && !url.startsWith("https://"))
   url = "http://" + url;

Ik zou waarschijnlijk ook vooraf uw EditText invullen waarin de gebruiker een URL typt met “http://”.


Antwoord 2, autoriteit 4%

een gebruikelijke manier om dit te bereiken is met de volgende code:

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

die kan worden gewijzigd in een korte codeversie …

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

of :

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

de kortste! :

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

veel plezier met coderen!


Antwoord 3, autoriteit 2%

Eenvoudig antwoord

Je kunt het officiële voorbeeld van Android Developerbekijken.

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

Hoe het werkt

Bekijk de constructor van Intent:

public Intent (String action, Uri uri)

U kunt de instantie android.net.Uridoorgeven aan de 2e parameter en er wordt een nieuwe intentie gemaakt op basis van de gegeven gegevens-URL.

En bel dan gewoon startActivity(Intent intent)om een nieuwe Activiteit te starten, die wordt gebundeld met de Intent met de opgegeven URL.

Heb ik de ifcontroleverklaring nodig?

Ja. De docszegt:

Als er geen apps op het apparaat zijn die de impliciete intentie kunnen ontvangen, crasht uw app wanneer deze startActivity() aanroept. Om eerst te controleren of er een app bestaat om de intentie te ontvangen, roept u resolveActivity() aan op uw Intent-object. Als het resultaat niet-null is, is er ten minste één app die de intentie aankan en is het veilig om startActivity() aan te roepen. Als het resultaat nul is, moet u de intentie niet gebruiken en, indien mogelijk, de functie uitschakelen die de intentie oproept.

Bonus

U kunt in één regel schrijven bij het maken van de Intent-instantie zoals hieronder:

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

Antwoord 4, autoriteit 2%

In 2.3 had ik meer geluk met

final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);

Het verschil is het gebruik van Intent.ACTION_VIEWin plaats van de String "android.intent.action.VIEW"


Antwoord 5

Probeer dit:

Uri uri = Uri.parse("https://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));

of als u wilt dat de webbrowser in uw activiteit wordt geopend, doet u dit als volgt:

WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);

en als je wilt zoomfunctie gebruiken in uw browser dan kunt u gebruik maken:

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);

Antwoord 6

Als u wilt gebruiker een dialoog met alle browser lijst weer te geven, zodat hij kiest de voorkeur kan, hier is voorbeeldcode:

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

Antwoord 7

Net als de andere oplossingen zijn geschreven (die werken prima), wil ik hetzelfde antwoord, maar met een tip die ik denk dat de meeste liever gebruik te maken.

In het geval u de app wilt u begint te openen in een nieuwe taak, indepandant van je eigen, in plaats van een verblijf op dezelfde stack, kunt u deze code gebruiken:

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

Er is ook een manier om de URL in Chrome Custom Tabs . Bijvoorbeeld 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)
}

Antwoord 8

andere optie in laad-url in dezelfde applicatie met webweergave

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://www.google.com");

Antwoord 9

Je kunt ook deze kant op gaan

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

In 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("https://www.google.com");
 }
}

Vergeet in Manifest geen internettoestemming toe te voegen…


Antwoord 10

Het antwoord van Kotlin:

val browserIntent = Intent(Intent.ACTION_VIEW, uri)
ContextCompat.startActivity(context, browserIntent, null)

Ik heb een extensie toegevoegd aan Uriom dit nog gemakkelijker te maken

myUri.openInBrowser(context)
fun Uri?.openInBrowser(context: Context) {
    this ?: return // Do nothing if uri is null
    val browserIntent = Intent(Intent.ACTION_VIEW, this)
    ContextCompat.startActivity(context, browserIntent, null)
}

Als een bonus, hier is een eenvoudige uitbreiding functie om veilig een string te converteren naar Uri.

"https://stackoverflow.com".asUri()?.openInBrowser(context)
fun String?.asUri(): Uri? {
    try {
        return Uri.parse(this)
    } catch (e: Exception) {}
    return null
}

Antwoord 11

Webview kan worden gebruikt om Url in uw applicaion laden.
URL kan worden voorzien van een gebruiker in de tekstweergave of u kunt het hardcoden.

Ook niet internet machtigingen AndroidManifest vergeten.

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

Antwoord 12

Binnen in de try-blok, plak de volgende code, Android Intent toepassingen rechtstreeks op de koppeling in de URI (Uniform Resource Identifier) ​​braces om de locatie van uw link te identificeren.

U kunt dit proberen:

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

Antwoord 13

Een korte versie van de code …

if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
     strUrl= "http://" + strUrl;
 }
 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));

Antwoord 14

Eenvoudig en best practice

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

Antwoord 15

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

Antwoord 16

Dus ik heb hier lang naar gezocht omdat alle andere antwoorden de standaard-app voor die link openden, maar niet de standaardbrowseren dat is wat ik wilde.

Het is me eindelijk gelukt:

// gathering the default browser
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"));
final ResolveInfo resolveInfo = context.getPackageManager()
    .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String defaultBrowserPackageName = resolveInfo.activityInfo.packageName;
final Intent intent2 = new Intent(Intent.ACTION_VIEW);
intent2.setData(Uri.parse(url));
if (!defaultBrowserPackageName.equals("android") {
    // android = no default browser is set 
    // (android < 6 or fresh browser install or simply no default set)
    // if it's the case (not in this block), it will just use normal way.
    intent2.setPackage(defaultBrowserPackageName);
}
context.startActivity(intent2);

BTW, je kunt context.whatever opmerken, omdat ik dit heb gebruikt voor een statische util-methode, als je dit in een activiteit doet, is het niet nodig.


Antwoord 17

Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);

Antwoord 18

De reactie van MarkBis juist. In mijn geval gebruik ik Xamarin en de code die moet worden gebruikt met C# en Xamarin is:

var uri = Android.Net.Uri.Parse ("http://www.xamarin.com");
var intent = new Intent (Intent.ActionView, uri);
StartActivity (intent);

Deze informatie is afkomstig van: https://developer.xamarin. com/recepten/android/fundamentals/intent/open_a_webpage_in_the_browser_application/


Antwoord 19

Aangepaste Chrome-tabbladen zijn nu beschikbaar:

De eerste stap is het toevoegen van de ondersteuningsbibliotheek voor aangepaste tabbladen aan uw build.gradle-bestand:

dependencies {
    ...
    compile 'com.android.support:customtabs:24.2.0'
}

En dan, om een aangepast Chrome-tabblad te openen:

String url = "https://www.google.pt/";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));

Voor meer informatie:
https://developer.chrome.com/multidevice/android/customtabs


Antwoord 20

Eenvoudig, websiteweergave via intentie,

Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.yoursite.in"));
startActivity(viewIntent);  

gebruik deze eenvoudige code om uw website in de Android-app te bekijken.

Internettoestemming toevoegen aan manifestbestand,

<uses-permission android:name="android.permission.INTERNET" /> 

Antwoord 21

Gebaseerd op het antwoord van Mark B en de opmerkingen hieronder:

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

Antwoord 22

android.webkit.URLUtilheeft de methode guessUrl(String)werkt prima (zelfs met file://of data://) sinds Api level 1(Android 1.0). Gebruik 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

In de activiteitsoproep:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));
if (intent.resolveActivity(getPackageManager()) != null)
    startActivity(intent);

Bekijk de volledige guessUrlcodevoor meer info.


Antwoord 23

Oké, ik heb elk antwoord gecontroleerd, maar welke app heeft deeplinking met dezelfde URL die de gebruiker wil gebruiken?

Vandaag kreeg ik deze case en het antwoord is browserIntent.setPackage("browser_package_name");

bijv. :

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

Bedankt!


Antwoord 24

Ga gewoon met een korte om uw URL in de browser te openen:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("YourUrlHere"));
startActivity(browserIntent);

Antwoord 25

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

De fout is opgetreden vanwege een ongeldige URL. Android OS kan geen actieweergave voor uw gegevens vinden. U heeft dus valideren dat de URL geldig is of niet.


Antwoord 26

Ik denk dat dit de beste is

openBrowser(context, "http://www.google.com")

Zet onderstaande code in globale klasse

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

Antwoord 27

Op deze manier wordt een methode gebruikt, zodat je elke String kunt invoeren in plaats van een vaste invoer. Dit bespaart wel wat regels code als het een aantal keren wordt gebruikt, omdat je maar drie regels nodig hebt om de methode aan te roepen.

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

Het gebruik van deze methode maakt het universeel bruikbaar. IT hoeft niet in een specifieke activiteit te worden geplaatst, omdat je het als volgt kunt gebruiken:

Intent i = getWebIntent("google.com");
if(i != null)
    startActivity();

Of als je het buiten een activiteit wilt starten, bel je gewoon startActivity op de activiteitsinstantie:

Intent i = getWebIntent("google.com");
if(i != null)
    activityInstance.startActivity(i);

Zoals te zien is in beide codeblokken, is er een nulcontrole. Dit is omdat het null retourneert als er geen app is om de bedoeling af te handelen.

Deze methode is standaard HTTP als er geen protocol is gedefinieerd, omdat er websites zijn die geen SSL-certificaat hebben (wat je nodig hebt voor een HTTPS-verbinding) en die zullen stoppen met werken als je probeert om HTTPS te gebruiken en dat is niet daar. Elke website kan nog steeds overschakelen naar HTTPS, dus die kanten brengen u hoe dan ook op HTTPS terecht


Omdat deze methode externe bronnen gebruikt om de pagina weer te geven, is het niet nodig om de internettoestemming aan te geven. De app die de webpagina weergeeft, moet dat doen


Antwoord 28

//OnClick Luisteraar

 @Override
      public void onClick(View v) {
        String webUrl = news.getNewsURL();
        if(webUrl!="")
        Utils.intentWebURL(mContext, webUrl);
      }

//Uw gebruiksmethode

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

Antwoord 29

Kotlin

startActivity(Intent(Intent.ACTION_VIEW).apply {
            data = Uri.parse(your_link)
        })

Antwoord 30

Van Ankobibliotheekmethode

fun Context.browse(url: String, newTask: Boolean = false): Boolean {
    try {
        val intent = Intent(Intent.ACTION_VIEW)
        intent.data = Uri.parse(url)
        if (newTask) {
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }
        startActivity(intent)
        return true
    } catch (e: ActivityNotFoundException) {
        e.printStackTrace()
        return false
    }
}

Other episodes