Jak mogę otworzyć adres URL w przeglądarce internetowej Androida z mojej aplikacji?

1344

Jak otworzyć adres URL z kodu we wbudowanej przeglądarce internetowej zamiast w mojej aplikacji?

Próbowałem tego:

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

ale mam wyjątek:

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Arutha
źródło
6
Myślę, że to z tego powodu: android-developers.blogspot.com/2009/12/...
Arutha
1
Dlaczego to nie działa na niektórych urządzeniach? nawet jeśli istnieje przeglądarka internetowa, przechodzi do ActivityNotFoundException.
Widzę ten sam problem, co @Manu. Podstawowa instalacja na Nexusie 6 ma chrome, ale linki powodujące wyjątek.
Brill Pappin,

Odpowiedzi:

2454

Spróbuj tego:

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

To mi odpowiada.

Jeśli chodzi o brakujące „http: //”, po prostu zrobiłbym coś takiego:

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

Prawdopodobnie wstępnie wypełniłbym również Twój tekst EditText, w którym użytkownik wpisuje adres URL „http: //”.

Mark B
źródło
2
Tyle że twój kod i mbaird nie są takie same, z tego, co mogę powiedzieć po tym, co zostało opublikowane. Upewnij się, że twój URL ma http://schemat - pokazany wyjątek sugeruje, że twój URL nie ma schematu.
CommonsWare
5
Tak ! Brakowało http: //! Adres URL jest wprowadzany przez użytkownika, czy istnieje sposób na automatyczne formatowanie?
Arutha
4
URLUtil to świetny sposób na sprawdzenie wprowadzonych przez użytkownika ciągów „url”
Dan
90
if (!url.startsWith("http://") && !url.startsWith("https://"))jest częstym błędem, który może prowadzić do adresów URL takich jak file: // i zepsuć kilka dobrych przypadków użycia. Spróbuj przeanalizować identyfikator URI z klasą URI i sprawdź, czy istnieje schemat. Jeśli nie, dodaj „http: //”;)
tuxSlayer
22
Potrzebujesz kontroli zerowej za pomocą resolveCheck. Zobacz oficjalne dokumenty : Uwaga: Jeśli na urządzeniu nie ma żadnych aplikacji, które mogłyby odbierać ukryte zamiary, aplikacja ulegnie awarii, gdy wywoła startActivity (). Aby najpierw sprawdzić, czy aplikacja istnieje, aby otrzymać zamiar, wywołaj polecenie resolActivity () na obiekcie Intent.
kenju
90

powszechnym sposobem osiągnięcia tego jest następny kod:

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

które można zmienić na wersję z krótkim kodem ...

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

lub:

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

najkrótszy! :

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

szczęśliwego kodowania!

Jorgesys
źródło
57

Prosta odpowiedź

Możesz zobaczyć oficjalną próbkę od programisty Androida .

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

Jak to działa

Proszę spojrzeć na konstruktora Intent:

public Intent (String action, Uri uri)

Możesz przejść android.net.Uri instancję do drugiego parametru, a nowa intencja zostanie utworzona na podstawie podanego adresu danych.

A potem po prostu zadzwoń startActivity(Intent intent) aby rozpocząć nową Aktywność, która jest powiązana z Zamiarem z danym adresem URL.

Czy potrzebuję if wyciągu czeku?

Tak. W docs mówi:

Jeśli na urządzeniu nie ma żadnych aplikacji, które mogłyby przyjąć ukryte zamiary, aplikacja ulegnie awarii, gdy wywoła startActivity (). Aby najpierw sprawdzić, czy aplikacja istnieje, aby otrzymać zamiar, wywołaj polecenie resolActivity () na obiekcie Intent. Jeśli wynik nie jest równy null, istnieje co najmniej jedna aplikacja, która może obsłużyć zamiar i można bezpiecznie wywołać startActivity (). Jeśli wynik jest zerowy, nie należy używać zamiaru i, jeśli to możliwe, należy wyłączyć funkcję wywołującą zamiar.

Premia

Możesz pisać w jednym wierszu podczas tworzenia instancji Intent, jak poniżej:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
kenju
źródło
3
Zakłada się, że podany adres URL zawiera http .
IgorGanapolsky
56

W 2.3 miałem więcej szczęścia

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

Różnica polega na użyciu Intent.ACTION_VIEWraczej niż ciągu"android.intent.action.VIEW"

MikeNereson
źródło
1
waht jest inny?
user1324936,
1
Ta odpowiedź bardzo mi pomogła. Nie wiem, jaka była różnica, ale mieliśmy problem z 2.3, że to rozwiązało. Czy ktoś wie, jaka jest różnica we wdrożeniu?
Innova,
2
Według Android Developer: ta odpowiedź - „Utwórz zamiar za pomocą danej akcji. Wszystkie inne pola (dane, typ, klasa) są puste”. oraz zaakceptowana odpowiedź - „Utwórz zamiar za pomocą danej akcji i dla danego adresu URL danych”.
Teo Inke
30

Spróbuj tego:

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

lub jeśli chcesz, otwórz przeglądarkę internetową w swojej działalności, wykonaj następujące czynności:

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

a jeśli chcesz użyć sterowania powiększeniem w przeglądarce, możesz użyć:

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
nikki
źródło
4
Zauważ, że wtyczki i tym podobne są wyłączone w WebView i że wymagane będą uprawnienia do INTERNETU. ( odniesienie )
22

Jeśli chcesz pokazać użytkownikowi dialog ze wszystkimi listami przeglądarki, aby mógł wybrać preferowany, oto przykładowy kod:

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

}
Dmytro Danylyk
źródło
5
jeśli istnieje wiele aplikacji, które mogą obsłużyć zamiar, system automatycznie zapewni wybieracz, prawda?
Jeffrey Blattman
@ xmen-wk, ponieważ adres URL może rozpoczynać się eterem za pomocą httplub https, a java dobrą praktyką jest deklarowanie „magicznych ciągów” jako stałych.
Dmytro Danylyk,
dzięki, nie wiedziałem o context.startActivity. Bardzo przydatne, gdy wywołuje się go z klasy zewnętrznej
WuerfelDev,
18

Tak jak rozwiązania napisane przez inne (które działają dobrze), chciałbym odpowiedzieć na to samo, ale wskazówką, którą moim zdaniem wolałby najczęściej używać.

Jeśli chcesz, aby aplikacja zaczęła się otwierać w nowym zadaniu, niezależnie od Twojego, zamiast pozostać na tym samym stosie, możesz użyć tego kodu:

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

Istnieje również sposób otwarcia adresu URL w niestandardowych kartach Chrome . Przykład w 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)
}
programista Androida
źródło
Czy wykonanie nowego zadania ochroni aplikację źródłową przed błędami i awariami, na wypadek problemów z przeglądarką internetową?
Oryginalny Android
@TheOriginalAndroid Nie rozumiem, co to ma wspólnego z awariami i przeglądarką internetową. Wyjaśnij, co próbujesz zrobić.
programista Androida
Dzięki za twoją odpowiedź. Twój post jest interesujący. Jaka jest korzyść z otwarcia nowego zadania, szczególnie na uruchomienie strony internetowej?
Oryginalny Android
2
@TheOriginalAndroid Wystarczy, że użytkownik będzie mógł wrócić do aplikacji, a następnie ponownie do przeglądarki internetowej. Jeśli otworzysz ekran ostatnich zadań, zobaczysz tutaj 2 zadania zamiast jednego. Ponadto zamiast pojedynczej czynności (która należy do zadania aplikacji) zamiast miniatury przeglądarki internetowej, zobaczysz 2: jedną z aplikacji i drugą z przeglądarki internetowej. Myślę, że w ten sposób jest mniej mylące.
programista Androida
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETjest przestarzały
Pratik Butani
17

inna opcja W Załaduj adres URL w tej samej aplikacji za pomocą Webview

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
Sanket
źródło
Zauważ, że wtyczki i tym podobne są wyłączone w WebView i że wymagane będą uprawnienia do INTERNETU. ( odniesienie )
12

Możesz także iść tą drogą

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

W kodzie Java:

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

 }

}

W Manifeście nie zapomnij dodać uprawnienia do Internetu ...

Aristo Michael
źródło
To jest interesujące i inne. Myślę, że w ten sposób użytkownik widzi przeglądarkę internetową w mojej aplikacji. Czy to prawda? Głosuję za.
Oryginalny Android
9

Widoku internetowego można użyć do załadowania adresu URL do aplikacji. Adres URL może zostać podany przez użytkownika w widoku tekstowym lub można go zakodować na stałe.

Nie zapomnij także o uprawnieniach internetowych w 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;
    }
}
Gorav Sharma
źródło
1
To rozwiązało problem z moim filmem: github.com/CrandellWS/VideoEnabledWebView/blob/master/app/src/…
CrandellWS
6

Wersja krótkiego kodu ...

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


 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
Jorgesys
źródło
6

W bloku try wklej następujący kod, Android Intent używa bezpośrednio linku w nawiasach klamrowych URI (Uniform Resource Identifier) ​​w celu identyfikacji lokalizacji twojego linku.

Możesz spróbować:

Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
Kanwar_Singh
źródło
5

Prosta i najlepsza praktyka

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

Metoda 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*/
    }
Umasankar
źródło
Użyj context!!.packageManagerzamiast getPackageManager()w Fragment.
CoolMind
4
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Pradeep Sodhi
źródło
3
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);
TheOddAbhi
źródło
witaj, początkujący. uzupełnij odpowiedź, podając zmienne, które nie istnieją w oryginalnym kodzie.
Tony Gil
3

Niestandardowe karty Chrome są teraz dostępne:

Pierwszym krokiem jest dodanie biblioteki obsługi niestandardowych kart do pliku build.gradle:

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

A następnie, aby otworzyć niestandardową kartę chrome:

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

Aby uzyskać więcej informacji: https://developer.chrome.com/multidevice/android/customtabs

francisco_ssb
źródło
2

Na podstawie odpowiedzi Marka B i poniższych komentarzy:

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);
    }
}
divonas
źródło
2

android.webkit.URLUtilmetoda guessUrl(String)działa idealnie dobrze (nawet z file://lub data://) od Api level 1(Android 1.0). Użyj jako:

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

W wywołaniu aktywności:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));

if (intent.resolveActivity(getPackageManager()) != null)
    startActivity(intent);

Sprawdź pełny guessUrlkod, aby uzyskać więcej informacji.

IG Pascual
źródło
2

OK, sprawdziłem każdą odpowiedź, ale jakiej aplikacji ma linkowanie z tym samym adresem URL, którego użytkownik chce użyć?

Dzisiaj dostałem tę sprawę i odpowiedź brzmi browserIntent.setPackage("browser_package_name");

np .:

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

Dziękuję Ci!

Vaibhav Kadam
źródło
Dobra odpowiedź. Wyjaśnia, jak otworzyć zamierzony adres URL w określonej przeglądarce (bezpośrednio), a nie polegać na wyborze przeglądarki przez system.
Mr-IDE,
2

Prosty, przeglądanie strony za pomocą intencji,

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

użyj tego prostego kodu, aby wyświetlić swoją stronę internetową w aplikacji na Androida.

Dodaj pozwolenie internetowe w pliku manifestu,

<uses-permission android:name="android.permission.INTERNET" /> 
stacktry
źródło
2
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();
}

Ten błąd wystąpił z powodu nieprawidłowego adresu URL, system operacyjny Android nie może znaleźć widoku akcji dla danych. Sprawdziłeś więc, czy adres URL jest prawidłowy czy nie.

Mayur Sojitra
źródło
1

Myślę, że to jest najlepsze

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

Umieść poniższy kod w klasie globalnej

    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);
    }
Karthik Sridharan
źródło
1

W ten sposób wykorzystuje się metodę, która pozwala na wprowadzenie dowolnego ciągu zamiast stałego wejścia. Powoduje to zaoszczędzenie niektórych wierszy kodu, jeśli są używane wielokrotnie, ponieważ do wywołania metody potrzebne są tylko trzy wiersze.

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

Zastosowanie tej metody sprawia, że ​​jest ona uniwersalnie użyteczna. IT nie musi być umieszczane w konkretnym działaniu, ponieważ możesz go użyć w następujący sposób:

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

Lub jeśli chcesz uruchomić go poza działaniem, wystarczy wywołać startActivity w instancji działania:

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

Jak widać w obu tych blokach kodu, istnieje kontrola zerowa. Dzieje się tak, ponieważ zwraca wartość null, jeśli nie ma aplikacji do obsługi zamiaru.

Domyślną metodą tej metody jest HTTP, jeśli nie zdefiniowano żadnego protokołu, ponieważ istnieją strony internetowe, które nie mają certyfikatu SSL (co jest potrzebne do połączenia HTTPS), a te przestaną działać, jeśli spróbujesz użyć HTTPS i nie ma go . Każda witryna może nadal wymuszać przejście na HTTPS, więc strony te i tak trafią na HTTPS


Ponieważ ta metoda wykorzystuje zasoby zewnętrzne do wyświetlenia strony, nie ma potrzeby deklarowania uprawnień INternet. Musi to zrobić aplikacja wyświetlająca stronę internetową

Zoe
źródło
1

// Odbiornik OnClick

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

// Twoja metoda użycia

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

    }
Faakhir
źródło
Gdzie jest zdefiniowane „isURL”?
Cabuxa.Mapache
1

Wystarczy otworzyć krótki, aby otworzyć adres URL w przeglądarce:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("YourUrlHere"));
startActivity(browserIntent);
Gaurav Lambole
źródło
1

Odpowiedź Kotlina:

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

Dodałem rozszerzenie, Uriaby było to jeszcze łatwiejsze

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

Jako bonus, tutaj jest prosta funkcja rozszerzenia, aby bezpiecznie przekonwertować ciąg na Uri.

fun String?.asUri(): Uri? {
    try {
        return Uri.parse(this)
    } catch (e: Exception) {}
    return null
}
Gibolt
źródło
1

Szukałem tego przez długi czas, ponieważ wszystkie inne odpowiedzi otwierały domyślną aplikację dla tego linku, ale nie domyślną przeglądarkę i tego właśnie chciałem.

W końcu udało mi się to zrobić:

// 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, możesz zauważyć. contextCokolwiek, ponieważ użyłem tego do statycznej metody użycia, jeśli robisz to w działaniu, nie jest to konieczne.

Bopol
źródło
0

Sprawdź, czy Twój adres URL jest poprawny. Dla mnie była niechciana przestrzeń przed adresem URL.

Sonia John Kavery
źródło
0

Spróbuj tego .. Pracował dla mnie!

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

        }

Kod XML: -

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

--------- LUB ------------------

String url = "";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Debasish Ghosh
źródło
W przypadku większości aplikacji dodanie WebView jest trudnym sposobem. Łatwiej jest otworzyć adres URL w przeglądarce.
Zoe