ฉันจะเปิด URL ในเว็บเบราว์เซอร์ของ Android จากแอปพลิเคชันของฉันได้อย่างไร


1344

วิธีเปิด URL จากรหัสในเว็บเบราว์เซอร์ในตัวแทนที่จะใช้ภายในแอปพลิเคชันของฉัน

ฉันลองสิ่งนี้:

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

แต่ฉันได้รับข้อยกเว้น:

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

6
ฉันคิดว่าเป็นเพราะสิ่งนี้: android-developers.blogspot.com/2009/12/…
Arutha

1
เหตุใดจึงไม่ทำงานในบางอุปกรณ์ แม้ว่าจะมีเว็บเบราว์เซอร์ก็ตามไปที่ ActivityNotFoundException

ฉันเห็นปัญหาเดียวกันกับ @Manu การติดตั้งเบื้องต้นบน Nexus 6 มีโครเมียม แต่ลิงก์ทำให้เกิดข้อยกเว้น
Brill Pappin

คำตอบ:


2456

ลองสิ่งนี้:

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

มันใช้งานได้ดีสำหรับฉัน

สำหรับ "http: //" ที่หายไปฉันแค่ทำอะไรแบบนี้:

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

ฉันอาจเติมข้อมูล EditText ของคุณไว้ล่วงหน้าว่าผู้ใช้พิมพ์ URL ด้วย "http: //"


2
ยกเว้นว่ารหัสและ mbaird ของคุณไม่เหมือนกันจากสิ่งที่ฉันสามารถบอกได้ว่ามีอะไรโพสต์ ตรวจสอบให้แน่ใจว่า URL ของคุณมีhttp://รูปแบบ - ข้อยกเว้นที่แสดงแนะนำว่า URL ของคุณไม่มีรูปแบบ
CommonsWare

5
ใช่! มันพลาด http: //! ผู้ใช้ป้อน URL มีวิธีการจัดรูปแบบอัตโนมัติหรือไม่
Arutha

4
URLUtil เป็นวิธีที่ยอดเยี่ยมในการตรวจสอบผู้ใช้ที่ป้อน "url" Strings
Dan

90
if (!url.startsWith("http://") && !url.startsWith("https://"))เป็นข้อผิดพลาดทั่วไปซึ่งอาจนำคุณไปสู่ ​​URL เช่นfile: //และทำลาย usecases ที่ดีบางอย่าง ลองแยกวิเคราะห์ uri กับคลาส URI และตรวจสอบว่ามีสคีมาหรือไม่ หากไม่มีให้เพิ่ม "http: //";)
tuxSlayer

22
คุณจำเป็นต้องมีการตรวจสอบ null resolveCheckกับ ดูเอกสารทางการ : ข้อควรระวัง: หากไม่มีแอพในอุปกรณ์ที่สามารถรับเจตนาโดยปริยายแอพของคุณจะหยุดทำงานเมื่อเรียกใช้ startActivity () หากต้องการตรวจสอบก่อนว่ามีแอปที่จะรับเจตนานี้หรือไม่ให้โทร resolActivity () บนวัตถุแสดงเจตนาของคุณ
kenju

90

วิธีทั่วไปในการบรรลุเป้าหมายนี้คือด้วยรหัสถัดไป:

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

ที่สามารถเปลี่ยนเป็นรหัสสั้น ๆ ...

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

หรือ :

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

ที่สั้นที่สุด! :

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

การเข้ารหัสที่มีความสุข!


57

คำตอบง่ายๆ

คุณสามารถดูตัวอย่างอย่างเป็นทางการจากนักพัฒนาซอฟต์แวร์ 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);
    }
}

มันทำงานอย่างไร

โปรดดูที่นวกรรมิกของIntent:

public Intent (String action, Uri uri)

คุณสามารถส่งandroid.net.Uriอินสแตนซ์ไปยังพารามิเตอร์ที่ 2 ได้และ Intent ใหม่จะถูกสร้างขึ้นตาม URL ข้อมูลที่กำหนด

จากนั้นเพียงโทรstartActivity(Intent intent)เพื่อเริ่มกิจกรรมใหม่ซึ่งมาพร้อมกับเจตนากับ URL ที่กำหนด

ฉันต้องการใบifแจ้งยอดเช็คหรือไม่?

ใช่. เอกสารพูดว่า:

หากไม่มีแอพในอุปกรณ์ที่สามารถรับเจตนาโดยนัยแอพของคุณจะทำงานผิดพลาดเมื่อเรียกใช้ startActivity () หากต้องการตรวจสอบก่อนว่ามีแอปที่จะรับเจตนานี้หรือไม่ให้โทร resolActivity () บนวัตถุแสดงเจตนาของคุณ หากผลลัพธ์ไม่เป็นโมฆะจะมีแอปอย่างน้อยหนึ่งแอปที่สามารถจัดการกับเจตนาและปลอดภัยที่จะเรียก startActivity () หากผลลัพธ์เป็นโมฆะคุณไม่ควรใช้ความตั้งใจและถ้าเป็นไปได้คุณควรปิดการใช้งานคุณสมบัติที่เรียกใช้ความตั้งใจ

โบนัส

คุณสามารถเขียนในหนึ่งบรรทัดเมื่อสร้างอินสแตนซ์เจตนาเช่นด้านล่าง:

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

3
สิ่งนี้อนุมานว่า URL ที่ให้มามีhttpอยู่ในนั้น
IgorGanapolsky

56

ใน 2.3 ฉันโชคดีกว่าด้วย

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

ความแตกต่างคือการใช้งานของIntent.ACTION_VIEWสตริงมากกว่า"android.intent.action.VIEW"


1
แตกต่างกันอย่างไร
user1324936

1
คำตอบนี้ช่วยฉันอย่างมาก ฉันไม่ทราบว่าความแตกต่างคืออะไร แต่เรามีปัญหากับ 2.3 ว่าสิ่งนี้แก้ไขได้ ไม่มีใครรู้ว่าสิ่งที่แตกต่างในการดำเนินการคืออะไร?
Innova

2
ตามที่นักพัฒนา Android: คำตอบนี้ - "สร้างความตั้งใจด้วยการกระทำที่กำหนดฟิลด์อื่น ๆ (ข้อมูล, ประเภท, คลาส) เป็นโมฆะ" และคำตอบที่ได้รับการยอมรับ - "สร้างเจตนาด้วยการกระทำที่กำหนดและสำหรับ URL ข้อมูลที่กำหนด"
Teo Inke

30

ลองสิ่งนี้:

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

หรือถ้าคุณต้องการเปิดเว็บเบราว์เซอร์ในกิจกรรมของคุณให้ทำดังนี้:

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

และหากคุณต้องการใช้การควบคุมการซูมในเบราว์เซอร์ของคุณคุณสามารถใช้:

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

4
โปรดทราบว่าปลั๊กอินและสิ่งดังกล่าวถูกปิดใช้งานใน WebView และจำเป็นต้องได้รับอนุญาตจาก INTERNET ( ข้อมูลอ้างอิง )

22

หากคุณต้องการให้ผู้ใช้สนทนากับรายการเบราว์เซอร์ทั้งหมดเพื่อให้เขาสามารถเลือกที่ต้องการนี่คือตัวอย่างรหัส:

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
หากมีหลายแอพที่สามารถจัดการกับความตั้งใจได้ระบบจะให้ผู้เลือกโดยอัตโนมัติใช่ไหม
Jeffrey Blattman

@ xmen-wk เพราะ url สามารถเริ่มต้นอีเธอร์ด้วยhttpหรือhttpsใน java มันเป็นวิธีที่ดีในการประกาศ 'สตริงมายากล' เป็นค่าคงที่
Dmytro Danylyk

ขอบคุณ, context.startActivityไม่ทราบเกี่ยวกับ มีประโยชน์มากเมื่อเรียกใช้จากคลาสภายนอก
WuerfelDev

18

เช่นเดียวกับวิธีแก้ปัญหาอื่น ๆ ที่เขียน (ใช้งานได้ดี) ฉันต้องการตอบในสิ่งเดียวกัน แต่ด้วยเคล็ดลับที่ฉันคิดว่าส่วนใหญ่ต้องการใช้

ในกรณีที่คุณต้องการให้แอปที่คุณเริ่มเปิดในงานใหม่ทำตัวเป็นอิสระแทนการอยู่ในกองซ้อนเดียวกันคุณสามารถใช้รหัสนี้:

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

นอกจากนี้ยังมีวิธีการที่จะเปิด URL ในส่วนChrome แท็บกำหนดเอง ตัวอย่างใน 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)
}

การสร้างงานใหม่จะป้องกันแอปต้นทางจากข้อบกพร่องและการล่มในกรณีที่เว็บเบราว์เซอร์มีปัญหาหรือไม่
Android ดั้งเดิม

@TheOriginalAndroid ฉันไม่เข้าใจว่ามันเกี่ยวกับการขัดข้องและเว็บเบราว์เซอร์อย่างไร โปรดอธิบายสิ่งที่คุณพยายามทำ
นักพัฒนา Android

ขอบคุณสำหรับคำตอบของคุณ โพสต์ของคุณน่าสนใจ ประโยชน์ของการเปิดงานใหม่โดยเฉพาะอย่างยิ่งสำหรับการเปิดตัวเว็บคืออะไร?
Android ดั้งเดิม

2
@TheOriginalAndroid เพื่อให้ผู้ใช้สามารถสลับกลับไปที่แอพของคุณจากนั้นกลับสู่เว็บเบราว์เซอร์อีกครั้ง หากคุณเปิดหน้าจองานล่าสุดคุณจะเห็น 2 งานที่นี่แทนงานเดียว นอกจากนี้แทนที่จะเห็นภาพขนาดย่อของเว็บเบราว์เซอร์ในงานเดียว (ซึ่งเป็นงานของแอปของคุณ) คุณจะเห็น 2: หนึ่งในแอปของคุณและอีกเว็บเบราว์เซอร์ ฉันคิดว่ามันทำให้สับสนน้อยลง
นักพัฒนา android

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETเลิกใช้แล้ว
Pratik Butani

17

ตัวเลือกอื่น ๆ ในการโหลด URL ในแอปพลิเคชันเดียวกันโดยใช้ Webview

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

โปรดทราบว่าปลั๊กอินและสิ่งดังกล่าวถูกปิดใช้งานใน WebView และจำเป็นต้องได้รับอนุญาตจาก INTERNET ( ข้อมูลอ้างอิง )

12

คุณสามารถไปทางนี้

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

ในรหัส 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");

 }

}

ในรายการอย่าลืมเพิ่มสิทธิ์อินเทอร์เน็ต ...


นี่เป็นสิ่งที่น่าสนใจและแตกต่าง ฉันเดาด้วยวิธีนี้ผู้ใช้เห็นเว็บเบราว์เซอร์ในแอพของฉัน นั่นถูกต้องใช่ไหม? ฉันโหวตขึ้น
Android ดั้งเดิม

9

สามารถใช้ Webview เพื่อโหลด Url ในใบสมัครของคุณ สามารถให้ URL จากผู้ใช้ในมุมมองข้อความหรือคุณสามารถฮาร์ดโค้ดได้

อย่าลืมสิทธิ์อินเทอร์เน็ตใน 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
ปัญหานี้ได้รับการแก้ไขปัญหาวิดีโอของฉัน: github.com/CrandellWS/VideoEnabledWebView/blob/master/app/src/…
CrandellWS

6

รหัสสั้น ๆ ...

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


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

6

ภายในบล็อกลองวางรหัสต่อไปนี้ Android Intent ใช้ลิงก์โดยตรงภายในวงเล็บปีกกา URI (Uniform Resource Identifier) ​​เพื่อระบุตำแหน่งของลิงก์ของคุณ

คุณสามารถลองสิ่งนี้:

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

5

วิธีปฏิบัติที่ง่ายและดีที่สุด

วิธีที่ 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*/
            }

วิธีที่ 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*/
    }

ใช้context!!.packageManagerแทนในgetPackageManager() Fragment
CoolMind


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

ยินดีต้อนรับมือใหม่ โปรดทำให้คำตอบสมบูรณ์ยิ่งขึ้นโดยประกาศตัวแปรที่ไม่มีอยู่ในรหัสต้นฉบับ
tony gil

3

การตอบสนองของMarkBนั้นถูกต้อง ในกรณีของฉันฉันใช้ Xamarin และรหัสที่ใช้กับ C # และ Xamarin คือ:

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

ข้อมูลนี้มาจาก: https://developer.xamarin.com/recipes/android/fundamentals/intent/open_a_webpage_in_the_browser_application/


3

ขณะนี้แท็บที่กำหนดเองของ Chrome พร้อมใช้งานแล้ว:

ขั้นตอนแรกคือการเพิ่มไลบรารีการสนับสนุนแท็บที่กำหนดเองไปยังไฟล์ build.gradle ของคุณ:

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

จากนั้นเมื่อต้องการเปิดแท็บกำหนดเองของ Chrome:

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

สำหรับข้อมูลเพิ่มเติม: https://developer.chrome.com/multidevice/android/customtabs


2

ตามคำตอบของ Mark B และความคิดเห็นที่ร้อง:

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.URLUtilมีวิธีการguessUrl(String)ทำงานที่ดีอย่างสมบูรณ์ (แม้จะมีfile://หรือdata://) ตั้งแต่Api level 1(Android 1.0) ใช้เป็น:

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

ในการโทรกิจกรรม:

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

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

ตรวจสอบguessUrlรหัสที่สมบูรณ์สำหรับข้อมูลเพิ่มเติม


2

โอเคฉันตรวจสอบทุกคำตอบ แต่แอพใดมี deeplinking ด้วย URL เดียวกันกับที่ผู้ใช้ต้องการใช้

วันนี้ฉันได้รับกรณีนี้และคำตอบคือ browserIntent.setPackage("browser_package_name");

เช่น :

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

ขอบคุณ!


คำตอบที่ดี. มันอธิบายถึงวิธีการเปิด URL ที่ตั้งใจบนเบราว์เซอร์ที่เฉพาะเจาะจง (โดยตรง) และไม่พึ่งพาระบบการเลือกเบราว์เซอร์
Mr-IDE

2

ง่ายดูเว็บไซต์ผ่านเจตนา

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

ใช้รหัสง่ายๆนี้เพื่อดูเว็บไซต์ของคุณในแอพ android

เพิ่มสิทธิ์อินเทอร์เน็ตในไฟล์ Manifest

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

ข้อผิดพลาดดังกล่าวเกิดขึ้นเนื่องจาก URL ไม่ถูกต้องระบบปฏิบัติการ Android ไม่สามารถหามุมมองการกระทำสำหรับข้อมูลของคุณ ดังนั้นคุณต้องตรวจสอบว่า URL นั้นถูกต้องหรือไม่


1

ฉันคิดว่านี่เป็นสิ่งที่ดีที่สุด

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

ใส่รหัสด้านล่างลงในระดับโลก

    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

วิธีนี้ใช้วิธีการเพื่อให้คุณสามารถป้อนสตริงใด ๆ แทนการมีอินพุตคงที่ วิธีนี้จะบันทึกรหัสบางบรรทัดหากใช้จำนวนครั้งซ้ำ ๆ เนื่องจากคุณต้องการเพียงสามบรรทัดในการเรียกใช้เมธอด

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

การใช้วิธีนี้ทำให้สามารถใช้งานได้ในระดับสากล ไม่จำเป็นต้องติดตั้งไอทีในกิจกรรมเฉพาะเนื่องจากคุณสามารถใช้งานได้เช่นนี้:

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

หรือถ้าคุณต้องการที่จะเริ่มต้นนอกกิจกรรมคุณเพียงแค่เรียก startActivity กับกิจกรรม:

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

ตามที่เห็นในบล็อกโค้ดทั้งสองนี้จะมีการตรวจสอบค่าว่าง นี่เป็นเพราะมันคืนค่า null หากไม่มีแอพที่จะจัดการกับเจตนา

เมธอดนี้ใช้ค่าเริ่มต้นเป็น HTTP หากไม่มีการกำหนดโปรโตคอลเนื่องจากมีเว็บไซต์ที่ไม่มีใบรับรอง SSL (สิ่งที่คุณต้องการสำหรับการเชื่อมต่อ HTTPS) และจะหยุดทำงานหากคุณพยายามใช้ HTTPS และไม่มี . เว็บไซต์ใด ๆ ยังคงสามารถบังคับให้ใช้กับ HTTPS ได้ดังนั้นฝ่ายต่างๆจะนำคุณเข้าสู่ HTTPS อย่างใดอย่างหนึ่ง


เนื่องจากวิธีนี้ใช้ทรัพยากรภายนอกเพื่อแสดงหน้าเว็บคุณไม่จำเป็นต้องประกาศสิทธิ์อินเทอร์เน็ต แอพที่แสดงหน้าเว็บต้องทำเช่นนั้น


1

// OnClick Listener

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

// วิธีการใช้ประโยชน์ของคุณ

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" อยู่ที่ไหน
Cabuxa.Mapache

1

เพียงไปที่ย่อหน้าสั้น ๆ เพื่อเปิด Url ในเบราว์เซอร์ของคุณ:

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

1

คำตอบของ Kotlin:

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

ฉันได้เพิ่มส่วนขยายUriเพื่อให้ง่ายยิ่งขึ้น

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

เป็นโบนัสนี่คือฟังก์ชั่นเสริมที่ง่ายในการแปลง String เป็น Uri ได้อย่างปลอดภัย

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

1

ดังนั้นฉันจึงค้นหาสิ่งนี้มาเป็นเวลานานเพราะคำตอบอื่น ๆ ทั้งหมดกำลังเปิดแอปเริ่มต้นสำหรับลิงก์นั้น แต่ไม่ใช่เบราว์เซอร์เริ่มต้นและนั่นคือสิ่งที่ฉันต้องการ

ในที่สุดฉันก็สามารถทำได้:

// 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 คุณสามารถสังเกตเห็นได้ว่าcontextอะไรก็ตามเพราะฉันใช้วิธีนี้สำหรับวิธีการใช้แบบคงที่หากคุณกำลังทำสิ่งนี้ในกิจกรรมมันไม่จำเป็น


0

ตรวจสอบว่า URL ของคุณถูกต้อง สำหรับฉันมีพื้นที่ที่ไม่พึงประสงค์ก่อน URL


0

ลองนี้ .. ทำเพื่อฉัน!

    public void webLaunch(View view) {
            WebView myWebView = (WebView) findViewById(R.id.webview);
            myWebView.setVisibility(View.VISIBLE);
            View view1=findViewById(R.id.recharge);
            view1.setVisibility(View.GONE);
            myWebView.getSettings().setJavaScriptEnabled(true);
            myWebView.loadUrl("<your link>");

        }

รหัส xml: -

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

--------- หรือ------------------

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

สำหรับแอพส่วนใหญ่การเพิ่ม WebView เป็นวิธีที่ทำได้ยาก ง่ายกว่าในการเปิด URL ในเบราว์เซอร์
Zoe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.