Làm cách nào tôi có thể mở URL trong trình duyệt web của Android từ ứng dụng của mình?


1346

Làm cách nào để mở URL từ mã trong trình duyệt web tích hợp thay vì trong ứng dụng của tôi?

Tôi đã thử điều này:

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

nhưng tôi có một ngoại lệ:

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

6
Tôi nghĩ đó là vì điều này: android-developers.blogspot.com/2009/12/...
Arutha

1
Tại sao điều này không hoạt động trong một số thiết bị? ngay cả khi có trình duyệt web, nó sẽ chuyển đến ActivityNotFoundException.

Tôi đang gặp vấn đề tương tự như @Manu. Cài đặt cơ bản trên Nexus 6, có chrome, nhưng các liên kết gây ra ngoại lệ.
Brill Pappin

Câu trả lời:


2458

Thử cái này:

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

Điều đó làm việc tốt cho tôi.

Đối với "http: //" bị thiếu, tôi sẽ làm một cái gì đó như thế này:

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

Tôi cũng có thể sẽ điền trước EditText của bạn rằng người dùng đang nhập URL bằng "http: //".


2
Ngoại trừ mã của bạn và mbaird không giống nhau, từ những gì tôi có thể nói cho những gì được đăng. Đảm bảo rằng URL của bạn có http://lược đồ - ngoại lệ được hiển thị cho thấy rằng URL của bạn đang thiếu lược đồ.
CommonsWare

5
Đúng ! Nó đã bỏ lỡ http: //! URL được nhập bởi người dùng, có cách nào để tự động định dạng?
Arutha

4
URLUtil là một cách tuyệt vời để kiểm tra chuỗi "url" của người dùng đã nhập
Dan

90
if (!url.startsWith("http://") && !url.startsWith("https://"))là một lỗi phổ biến có thể dẫn bạn đến các url như tệp: // và phá vỡ một số usecase tốt. Hãy thử phân tích uri với lớp URI và kiểm tra xem có lược đồ nào không. Nếu không, hãy thêm "http: //";)
tuxSlayer

22
Bạn cần kiểm tra null với resolveCheck. Xem tài liệu chính thức : Thận trọng: Nếu không có ứng dụng nào trên thiết bị có thể nhận được ý định ngầm, ứng dụng của bạn sẽ gặp sự cố khi gọi startActivity (). Trước tiên, để xác minh rằng một ứng dụng tồn tại để nhận ý định, hãy gọi giải quyếtActivity () trên đối tượng Ý định của bạn.
kenju

91

một cách phổ biến để đạt được điều này là với mã tiếp theo:

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

có thể thay đổi thành phiên bản mã ngắn ...

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

hoặc là :

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

ngắn nhất! :

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

hạnh phúc mã hóa!


58

Câu trả lời đơn giản

Bạn có thể xem mẫu chính thức từ Nhà phát triển 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);
    }
}

Làm thế nào nó hoạt động

Xin hãy xem các nhà xây dựng của Intent:

public Intent (String action, Uri uri)

Bạn có thể chuyển android.net.Urithể hiện cho tham số thứ 2 và một Ý định mới được tạo dựa trên url dữ liệu đã cho.

Và sau đó, chỉ cần gọi startActivity(Intent intent)để bắt đầu một Hoạt động mới, được đóng gói với Ý định với URL đã cho.

Tôi có cần iftuyên bố kiểm tra?

Đúng. Các tài liệu nói:

Nếu không có ứng dụng nào trên thiết bị có thể nhận được ý định ngầm, ứng dụng của bạn sẽ bị sập khi gọi startActivity (). Trước tiên, để xác minh rằng một ứng dụng tồn tại để nhận ý định, hãy gọi giải quyếtActivity () trên đối tượng Ý định của bạn. Nếu kết quả là không có giá trị, có ít nhất một ứng dụng có thể xử lý ý định và an toàn để gọi startActivity (). Nếu kết quả là null, bạn không nên sử dụng ý định và nếu có thể, bạn nên vô hiệu hóa tính năng gọi ra ý định đó.

Tặng kem

Bạn có thể viết thành một dòng khi tạo đối tượng Intent như bên dưới:

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

3
Điều này giả định rằng url được cung cấp có http trong đó.
IgorGanapolsky

57

Năm 2.3, tôi đã may mắn hơn với

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

Sự khác biệt là việc sử dụng Intent.ACTION_VIEWchứ không phải là Chuỗi"android.intent.action.VIEW"


1
waht có gì khác?
user1324936 17/11/13

1
Câu trả lời này đã giúp tôi rất nhiều. Tôi không biết sự khác biệt là gì, nhưng chúng tôi đã có một vấn đề với 2.3 rằng điều này đã giải quyết. Có ai biết sự khác biệt trong việc thực hiện là gì?
Innova

2
Theo Nhà phát triển Android: câu trả lời này - "Tạo ý định bằng một hành động nhất định. Tất cả các trường khác (dữ liệu, loại, lớp) đều không có giá trị." và câu trả lời được chấp nhận - "Tạo một ý định với một hành động nhất định và cho một url dữ liệu nhất định."
Teo Inke

30

Thử cái này:

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

hoặc nếu bạn muốn thì trình duyệt web mở trong hoạt động của bạn thì hãy làm như thế này:

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

và nếu bạn muốn sử dụng điều khiển thu phóng trong trình duyệt của mình thì bạn có thể sử dụng:

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

4
Lưu ý rằng các plugin và những thứ đó bị vô hiệu hóa trong WebView và các quyền INTERNET sẽ được yêu cầu. ( tham khảo )

22

Nếu bạn muốn hiển thị cho người dùng một cuộc đối thoại với tất cả danh sách trình duyệt, để anh ta có thể chọn ưu tiên, đây là mã mẫu:

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

}

5
Nếu có nhiều ứng dụng có thể xử lý ý định, hệ thống sẽ tự động cung cấp một trình chọn, phải không?
Jeffrey Blattman

@ xmen-wk vì url có thể bắt đầu ether bằng httphoặc https, và trong java, đó là một cách thực hành tốt để khai báo 'chuỗi ma thuật' là hằng số.
Dmytro Danylyk

thx, không biết về context.startActivity. Rất hữu ích khi gọi nó từ một lớp bên ngoài
WuerfelDev

18

Cũng giống như các giải pháp khác đã viết (hoạt động tốt), tôi muốn trả lời điều tương tự, nhưng với một mẹo mà tôi nghĩ rằng hầu hết sẽ thích sử dụng.

Trong trường hợp bạn muốn ứng dụng bạn bắt đầu mở trong một tác vụ mới, độc lập của riêng bạn, thay vì ở trên cùng một ngăn xếp, bạn có thể sử dụng mã này:

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

Ngoài ra còn có một cách để mở URL trong Tab tùy chỉnh Chrome . Ví dụ trong 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)
}

Sẽ thực hiện một tác vụ mới bảo vệ ứng dụng nguồn khỏi các lỗi và sự cố, trong trường hợp trình duyệt web có vấn đề?
Android gốc

@TheOrigenAndroid Tôi không hiểu nó phải làm gì với sự cố và trình duyệt web. Hãy giải thích những gì bạn đang cố gắng làm.
nhà phát triển Android

Cám ơn phản hồi của bạn. Bài viết của bạn rất thú vị. Lợi ích của việc mở một nhiệm vụ mới đặc biệt là cho một khởi chạy web là gì?
Android gốc

2
@TheOrigenAndroid Chỉ để người dùng có thể quay lại ứng dụng của bạn, sau đó quay lại trình duyệt web. Nếu bạn mở màn hình tác vụ gần đây, bạn sẽ thấy 2 tác vụ ở đây thay vì một. Ngoài ra, thay vì nhìn thấy hình thu nhỏ của trình duyệt web trong một tác vụ (thuộc về nhiệm vụ của ứng dụng của bạn), bạn sẽ thấy 2: một trong số các ứng dụng của bạn và một trình duyệt web khác. Tôi nghĩ rằng nó ít gây nhầm lẫn theo cách này.
nhà phát triển Android

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETkhông được chấp nhận
Pratik Butani

17

tùy chọn khác Trong Tải Url trong cùng một ứng dụng bằng Webview

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

Lưu ý rằng các plugin và những thứ đó bị vô hiệu hóa trong WebView và các quyền INTERNET sẽ được yêu cầu. ( tham khảo )

12

Bạn cũng có thể đi theo con đường này

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

Trong mã 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");

 }

}

Trong Manifest đừng quên thêm quyền internet ...


Điều này thật thú vị và khác biệt. Tôi đoán theo cách này người dùng sẽ thấy một trình duyệt web trong ứng dụng của tôi. Có đúng không? Tôi upvote.
Android gốc

9

Webview có thể được sử dụng để tải Url trong ứng dụng của bạn. URL có thể được cung cấp từ người dùng trong chế độ xem văn bản hoặc bạn có thể mã hóa nó.

Cũng đừng quên quyền truy cập internet trong 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;
    }
}

1
Điều này đã khắc phục sự cố video của tôi: github.com/CrandellWS/VideoEnablesWebView/blob/master/app/src/ mẹo
CrandellWS

6

Một phiên bản mã ngắn ...

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


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

6

Trong khối thử của bạn, dán mã sau đây, Android Intent sử dụng trực tiếp liên kết trong các dấu ngoặc nhọn URI (Mã định danh tài nguyên đồng nhất) để xác định vị trí của liên kết của bạn.

Bạn có thể thử điều này:

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

5

Thực hành đơn giản và tốt nhất

Cách 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*/
            }

Cách 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*/
    }

Sử dụng context!!.packageManagerthay vì getPackageManager()trong a Fragment.
CoolMind

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

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

chào mừng, người mới. vui lòng làm cho câu trả lời đầy đủ hơn, khai báo các biến không tồn tại trong mã gốc.
tony gil


3

Các tab tùy chỉnh Chrome hiện có sẵn:

Bước đầu tiên là thêm Thư viện hỗ trợ tab tùy chỉnh vào tệp build.gradle của bạn:

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

Và sau đó, để mở tab tùy chỉnh chrome:

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

Để biết thêm thông tin: https://developer.chrome.com/multidevice/android/customtabs


2

Dựa trên câu trả lời của Mark B và các bình luận dưới đây:

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

android.webkit.URLUtilcó phương thức hoạt guessUrl(String)động hoàn toàn tốt (ngay cả với file://hoặc data://) kể từ Api level 1(Android 1.0). Sử dụng như là:

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

Trong cuộc gọi Hoạt động:

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

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

Kiểm tra guessUrl hoàn chỉnh để biết thêm.


2

Được rồi, tôi đã kiểm tra mọi câu trả lời nhưng ứng dụng nào có liên kết sâu với cùng một URL mà người dùng muốn sử dụng?

Hôm nay tôi có trường hợp này và câu trả lời là browserIntent.setPackage("browser_package_name");

ví dụ :

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

Cảm ơn bạn!


Câu trả lời tốt. Nó giải thích cách mở URL Ý định trên một trình duyệt cụ thể (trực tiếp) và không phụ thuộc vào hệ thống chọn trình duyệt.
Mr-IDE

2

Đơn giản, xem trang web thông qua ý định,

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

sử dụng mã đơn giản này để xem trang web của bạn trong ứng dụng Android.

Thêm quyền internet trong tệp kê khai,

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

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

Lỗi đó xảy ra do URL không hợp lệ, HĐH Android không thể tìm thấy chế độ xem hành động cho dữ liệu của bạn. Vì vậy, bạn đã xác nhận rằng URL có hợp lệ hay không.


1

Tôi nghĩ rằng đây là tốt nhất

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

Đặt mã dưới đây vào lớp toàn cầu

    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

Cách này sử dụng một phương thức, để cho phép bạn nhập bất kỳ Chuỗi nào thay vì có đầu vào cố định. Điều này không lưu một số dòng mã nếu được sử dụng nhiều lần, vì bạn chỉ cần ba dòng để gọi phương thức.

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

Sử dụng phương pháp này làm cho nó có thể sử dụng phổ biến. CNTT không phải được đặt trong một hoạt động cụ thể, vì bạn có thể sử dụng nó như thế này:

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

Hoặc nếu bạn muốn bắt đầu nó bên ngoài một hoạt động, bạn chỉ cần gọi startActivity trên ví dụ hoạt động:

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

Như đã thấy trong cả hai khối mã này, có một kiểm tra null. Điều này là vì nó trả về null nếu không có ứng dụng để xử lý ý định.

Phương thức này mặc định là HTTP nếu không có giao thức được xác định, vì có những trang web không có chứng chỉ SSL (những gì bạn cần cho kết nối HTTPS) và chúng sẽ ngừng hoạt động nếu bạn cố sử dụng HTTPS và nó không ở đó . Bất kỳ trang web nào vẫn có thể buộc phải HTTPS, vì vậy những bên đó sẽ đưa bạn đến HTTPS bằng mọi cách


Vì phương pháp này sử dụng các tài nguyên bên ngoài để hiển thị trang, nên bạn không cần phải khai báo quyền INternet. Ứng dụng hiển thị trang web phải làm điều đó


1

// Trình nghe OnClick

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

// Phương pháp sử dụng của bạn

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

    }

"IsURL" được định nghĩa ở đâu?
Cabuxa.Mapache

1

Chỉ cần đi với một cái ngắn để mở Url của bạn trong Trình duyệt:

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

1

Câu trả lời của Kotlin:

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

Tôi đã thêm một tiện ích mở rộng Uriđể làm cho việc này thậm chí còn dễ dàng hơn

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

Như một phần thưởng, đây là một chức năng mở rộng đơn giản để chuyển đổi Chuỗi thành Uri một cách an toàn.

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

1

Vì vậy, tôi đã tìm kiếm điều này trong một thời gian dài bởi vì tất cả các câu trả lời khác đang mở ứng dụng mặc định cho liên kết đó, nhưng không phải trình duyệt mặc định và đó là điều tôi muốn.

Cuối cùng tôi cũng đã làm được:

// 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, bạn có thể nhận thấy contextbất cứ điều gì, bởi vì tôi đã sử dụng phương thức này cho phương thức sử dụng tĩnh, nếu bạn đang thực hiện việc này trong một hoạt động thì không cần thiết.


0

Kiểm tra xem url của bạn là chính xác. Đối với tôi có một không gian không mong muốn trước url.


0

Hãy thử điều này..Làm cho tôi!

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

        }

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

--------- HOẶC LÀ------------------

String url = "";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

Đối với hầu hết các ứng dụng, thêm WebView là một cách khó để thực hiện. Nó dễ dàng hơn để mở URL trong trình duyệt.
Zoe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.