Bagaimana saya bisa membuka URL di browser web Android dari aplikasi saya?

1346

Bagaimana cara membuka URL dari kode di peramban web bawaan alih-alih di dalam aplikasi saya?

Saya mencoba ini:

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

tapi saya mendapat Pengecualian:

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Arutha
sumber
6
Saya pikir itu karena ini: android-developers.blogspot.com/2009/12/...
Arutha
1
Mengapa ini tidak berfungsi di beberapa perangkat? bahkan jika ada browser web, ia pergi ke ActivityNotFoundException.
Saya melihat masalah yang sama dengan @Manu. Instalasi dasar pada Nexus 6, memiliki chrome, tetapi tautan menyebabkan pengecualian.
Brill Pappin

Jawaban:

2458

Coba ini:

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

Itu bekerja dengan baik untuk saya.

Adapun "http: //" yang hilang saya hanya akan melakukan sesuatu seperti ini:

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

Saya mungkin juga akan pra-mengisi EditText Anda bahwa pengguna mengetik URL dengan "http: //".

Mark B
sumber
2
Kecuali bahwa kode dan mbaird Anda tidak sama, dari apa yang dapat saya katakan untuk apa yang diposting. Pastikan URL Anda memiliki http://skema - pengecualian yang ditunjukkan menunjukkan bahwa URL Anda kurang memiliki skema.
CommonsWare
5
Iya ! Itu melewatkan http: //! URL dimasukkan oleh pengguna, adakah cara untuk memformat secara otomatis?
Arutha
4
URLUtil adalah cara terbaik untuk memeriksa apakah pengguna memasukkan "url" Strings
Dan
90
if (!url.startsWith("http://") && !url.startsWith("https://"))adalah kesalahan umum yang dapat mengarahkan Anda ke url seperti file: // dan merusak beberapa usecases yang baik. Cobalah mengurai uri dengan kelas URI dan periksa apakah ada skema. Jika tidak, tambahkan "http: //";)
tuxSlayer
22
Anda perlu memeriksa nol resolveCheck. Lihat dokumen resmi : Perhatian: Jika tidak ada aplikasi di perangkat yang dapat menerima maksud tersirat, aplikasi Anda akan macet ketika memanggil startActivity (). Untuk terlebih dahulu memverifikasi bahwa ada aplikasi untuk menerima niat, panggil resolActivity () pada objek Intent Anda.
kenju
91

cara umum untuk mencapai ini adalah dengan kode berikut:

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

yang dapat diubah ke versi kode pendek ...

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

atau :

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

terpendek! :

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

selamat coding!

Jorgesys
sumber
58

Jawaban Sederhana

Anda dapat melihat sampel resmi dari Pengembang Android .

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

Bagaimana itu bekerja

Silakan lihat di konstruktor Intent:

public Intent (String action, Uri uri)

Anda dapat mengirimkan android.net.Uriinstance ke parameter ke-2, dan Intent baru dibuat berdasarkan url data yang diberikan.

Dan kemudian, cukup panggil startActivity(Intent intent)untuk memulai Kegiatan baru, yang dibundel dengan Intent dengan URL yang diberikan.

Apakah saya perlu ifpernyataan cek?

Iya. The docs mengatakan:

Jika tidak ada aplikasi di perangkat yang dapat menerima maksud tersirat, aplikasi Anda akan macet ketika memanggil startActivity (). Untuk terlebih dahulu memverifikasi bahwa ada aplikasi untuk menerima niat, panggil resolActivity () pada objek Intent Anda. Jika hasilnya bukan nol, setidaknya ada satu aplikasi yang dapat menangani maksud dan aman untuk memanggil startActivity (). Jika hasilnya nol, Anda tidak boleh menggunakan niat dan, jika mungkin, Anda harus menonaktifkan fitur yang memanggil niat.

Bonus

Anda dapat menulis dalam satu baris saat membuat instance Intent seperti di bawah ini:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
kenju
sumber
3
Ini menganggap bahwa url yang disediakan memiliki http di dalamnya.
IgorGanapolsky
57

Pada 2.3, saya lebih beruntung

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

Perbedaannya adalah penggunaan Intent.ACTION_VIEWdaripada String"android.intent.action.VIEW"

MikeNereson
sumber
1
Apa bedanya?
user1324936
1
Jawaban ini sangat membantu saya. Saya tidak tahu apa perbedaannya, tetapi kami memiliki masalah dengan 2.3 yang diselesaikan. Adakah yang tahu apa perbedaan dalam implementasinya?
Innova
2
Menurut Pengembang Android: jawaban ini - "Buat maksud dengan tindakan yang diberikan. Semua bidang lainnya (data, tipe, kelas) adalah nol." dan jawaban yang diterima - "Buat maksud dengan tindakan yang diberikan dan untuk url data yang diberikan."
Teo Inke
30

Coba ini:

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

atau jika Anda ingin maka browser web terbuka di aktivitas Anda maka lakukan seperti ini:

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

dan jika Anda ingin menggunakan kontrol zoom di browser Anda maka Anda dapat menggunakan:

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
nikki
sumber
4
Perhatikan bahwa plugin dan semacamnya dinonaktifkan di WebView, dan bahwa izin INTERNET akan diperlukan. ( referensi )
22

Jika Anda ingin menunjukkan kepada pengguna dialog dengan semua daftar peramban, sehingga ia dapat memilih yang disukai, berikut ini contoh kode:

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
sumber
5
jika ada beberapa aplikasi yang dapat menangani maksudnya, sistem akan secara otomatis menyediakan pemilih, bukan?
Jeffrey Blattman
@ xmen-wk karena url dapat memulai eter dengan httpatau https, dan dalam java itu adalah praktik yang baik untuk mendeklarasikan 'string ajaib' sebagai konstanta.
Dmytro Danylyk
Terima kasih context.startActivity. Sangat berguna saat memanggilnya dari kelas eksternal
WuerfelDev
18

Sama seperti solusi lain yang telah ditulis (yang berfungsi dengan baik), saya ingin menjawab hal yang sama, tetapi dengan tip yang saya pikir sebagian besar lebih suka menggunakan.

Jika Anda ingin aplikasi yang Anda buka di tugas baru, tidak tergantung pada Anda sendiri, alih-alih tetap berada di tumpukan yang sama, Anda dapat menggunakan kode ini:

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

Ada juga cara untuk membuka URL di Tab Kustom Chrome . Contoh di 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)
}
pengembang android
sumber
Akankah membuat tugas baru melindungi aplikasi sumber dari gangguan dan kerusakan, seandainya peramban web bermasalah?
Android Asli
@TheOriginalAndroid Saya tidak mengerti apa hubungannya dengan crash dan browser web. Tolong jelaskan apa yang Anda coba lakukan.
pengembang android
Terimakasih atas tanggapan Anda. Posting Anda menarik. Apa manfaat dari membuka tugas baru terutama untuk peluncuran web?
The Original Android
2
@TheOriginalAndroid Hanya agar pengguna dapat beralih kembali ke aplikasi Anda, dan kemudian kembali lagi ke browser web. Jika Anda membuka layar tugas terbaru, Anda akan melihat 2 tugas di sini, bukan satu. Selain itu, alih-alih melihat thumbnail browser web dalam satu tugas (yang menjadi tugas aplikasi Anda), Anda akan melihat 2: satu aplikasi Anda, dan yang lain dari browser web. Saya pikir ini kurang membingungkan dengan cara ini.
pengembang android
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETsudah ditinggalkan
Pratik Butani
17

pilihan lain Di Muat Url dalam Aplikasi yang Sama menggunakan Webview

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
Sanket
sumber
Perhatikan bahwa plugin dan semacamnya dinonaktifkan di WebView, dan bahwa izin INTERNET akan diperlukan. ( referensi )
12

Anda juga bisa pergi dengan cara ini

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

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

 }

}

Dalam Manifest jangan lupa menambahkan izin internet ...

Aristo Michael
sumber
Ini menarik dan berbeda. Saya kira cara ini pengguna melihat browser web di aplikasi saya. Apakah itu benar? Saya merasa senang.
Android Asli
9

Webview dapat digunakan untuk memuat Url dalam aplikasi Anda. URL dapat diberikan dari pengguna dalam tampilan teks atau Anda dapat men-kodenya.

Juga jangan lupa izin internet di 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
sumber
1
Ini memperbaiki masalah video saya: github.com/CrandellWS/VideoEnabledWebView/blob/master/app/src/…
CrandellWS
6

Versi kode pendek ...

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


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

Di dalam blok percobaan Anda, rekatkan kode berikut, Android Intent menggunakan langsung tautan dalam kurung kurawal URI (Uniform Resource Identifier) ​​untuk mengidentifikasi lokasi tautan Anda.

Anda dapat mencoba ini:

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

Praktik Sederhana dan Terbaik

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

Metode 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
sumber
Gunakan context!!.packageManagersebagai ganti getPackageManager()dalam a 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
sumber
3
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);
TheOddAbhi
sumber
selamat datang, pemula. tolong buat jawabannya lebih lengkap, dengan mendeklarasikan variabel yang tidak ada dalam kode asli.
tony gil
3

Tab khusus Chrome sekarang tersedia:

Langkah pertama adalah menambahkan Perpustakaan Dukungan Tab Kustom ke file build.gradle Anda:

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

Dan kemudian, untuk membuka tab khusus krom:

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

Untuk info lebih lanjut: https://developer.chrome.com/multidevice/android/customtabs

francisco_ssb
sumber
2

Berdasarkan jawaban Mark B dan komentar di bawah:

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

android.webkit.URLUtilmemiliki metode yang guessUrl(String)berfungsi dengan baik (bahkan dengan file://atau data://) sejak Api level 1(Android 1.0). Digunakan sebagai:

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

Dalam panggilan Aktivitas:

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

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

Periksa guessUrlkode lengkap untuk info lebih lanjut.

IG Pascual
sumber
2

Oke, saya memeriksa setiap jawaban tetapi aplikasi apa yang memiliki deeplinking dengan URL yang sama yang ingin digunakan pengguna?

Hari ini saya dapat kasus ini dan jawabannya adalah browserIntent.setPackage("browser_package_name");

misalnya:

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

Terima kasih!

Vaibhav Kadam
sumber
Jawaban yang bagus. Ini menjelaskan cara membuka URL Intent pada browser tertentu (langsung), dan tidak bergantung pada sistem memilih browser.
Mr-IDE
2

Sederhana, tampilan situs web melalui niat,

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

gunakan kode sederhana ini untuk melihat situs web Anda di aplikasi android.

Tambahkan izin internet dalam file manifes,

<uses-permission android:name="android.permission.INTERNET" /> 
stacktry
sumber
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();
}

Kesalahan itu terjadi karena URL tidak valid, OS Android tidak dapat menemukan tampilan tindakan untuk data Anda. Jadi, Anda telah memvalidasi bahwa URL itu valid atau tidak.

Mayur Sojitra
sumber
1

Saya pikir ini yang terbaik

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

Masukkan kode di bawah ini ke dalam kelas global

    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
sumber
1

Cara ini menggunakan metode, untuk memungkinkan Anda memasukkan String apa pun alih-alih memiliki input tetap. Ini menghemat beberapa baris kode jika digunakan berulang kali, karena Anda hanya perlu tiga baris untuk memanggil metode.

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

Menggunakan metode ini membuatnya dapat digunakan secara universal. TI tidak harus ditempatkan dalam aktivitas tertentu, karena Anda dapat menggunakannya seperti ini:

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

Atau jika Anda ingin memulainya di luar suatu aktivitas, Anda cukup memanggil startActivity pada instance aktivitas:

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

Seperti yang terlihat di kedua blok kode ini ada cek-nol. Ini karena mengembalikan nol jika tidak ada aplikasi untuk menangani maksud.

Metode ini default ke HTTP jika tidak ada protokol yang ditentukan, karena ada situs web yang tidak memiliki sertifikat SSL (apa yang Anda butuhkan untuk koneksi HTTPS) dan itu akan berhenti berfungsi jika Anda mencoba menggunakan HTTPS dan tidak ada . Situs web apa pun masih bisa memaksakan ke HTTPS, jadi pihak-pihak tersebut mendarat Anda di HTTPS


Karena metode ini menggunakan sumber daya luar untuk menampilkan halaman, Anda tidak perlu mendeklarasikan izin Internet. Aplikasi yang menampilkan halaman web harus melakukan itu

Zoe
sumber
1

// Pendengar OnClick

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

// Metode Utilismu

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
sumber
Di mana "isURL" didefinisikan?
Cabuxa.Mapache
1

Cukup buka yang singkat untuk membuka Url Anda di Browser:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("YourUrlHere"));
startActivity(browserIntent);
Gaurav Lambole
sumber
1

The Kotlin menjawab:

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

Saya telah menambahkan ekstensi Uriuntuk membuatnya lebih mudah

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

Sebagai bonus, berikut adalah fungsi ekstensi sederhana untuk mengkonversi String ke Uri dengan aman.

fun String?.asUri(): Uri? {
    try {
        return Uri.parse(this)
    } catch (e: Exception) {}
    return null
}
Gibolt
sumber
1

Jadi saya sudah lama mencari ini karena semua jawaban lain membuka aplikasi default untuk tautan itu, tetapi bukan browser default dan itulah yang saya inginkan.

Saya akhirnya berhasil melakukannya:

// 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, Anda dapat melihat. contextApa pun, karena saya telah menggunakan ini untuk metode util statis, jika Anda melakukan ini dalam suatu kegiatan, itu tidak diperlukan.

bopol
sumber
0

Periksa apakah url Anda benar. Bagi saya ada ruang yang tidak diinginkan sebelum url.

Sonia John Kavery
sumber
0

Coba ini..Bekerja untuk saya!

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

        }

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

--------- ATAU------------------

String url = "";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Debasish Ghosh
sumber
Untuk sebagian besar aplikasi, menambahkan WebView adalah cara yang sulit untuk melakukannya. Lebih mudah membuka URL di browser.
Zoe