studio - intent open app android




如何從我的應用程序中打開Android Web瀏覽器中的URL? (19)

簡單的答案

你可以看到Android Developer的官方示例

/**
 * 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實例傳遞給第二個參數,並根據給定的數據url創建一個新的Intent。

然後,只需調用startActivity(Intent intent)來啟動一個新的Activity,該Intent與具有給定URL的Intent捆綁在一起。

我需要if檢查語句嗎?

是。 文檔說:

如果設備上沒有可以接收隱式意圖的應用程序,則您的應用程序在調用startActivity()時會崩潰。 要首先驗證應用程序是否存在以接收意圖,請調用您的Intent對像上的resolveActivity()。 如果結果為非null,則至少有一個應用程序可以處理該意圖,並且可以安全地調用startActivity()。 如果結果為空,則不應使用意圖,如果可能,應禁用調用該意圖的功能。

獎金

您可以在創建Intent實例時寫入一行,如下所示:

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

如何從內置Web瀏覽器中的代碼而不是在我的應用程序中打開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

實現這一目標的常用方法是使用下一個代碼:

String url = "http://www..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..com"));      
startActivity(intent); 

要么 :

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

最短的! :

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

快樂的編碼!


Chrome自定義標籤現已推出:

第一步是將Custom Tabs Support Library添加到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/customtabshttps://developer.chrome.com/multidevice/android/customtabs


Webview可用於在您的應用程序中加載Url。 URL可以由用戶在文本視圖中提供,也可以對其進行硬編碼。

另外不要忘記AndroidManifest中的Internet權限。

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

其他選項在使用Webview的相同應用程序中加載Url

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

基本介紹:

https://正在使用該代碼進入“代碼”,以便兩者之間無法讀取它們。 這可以保護您的信息免受黑客的侵害。

http://只是使用共享目的,並不安全。

關於你的問題:
XML設計:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.sridhar.sharedpreferences.MainActivity">
   <LinearLayout
       android:orientation="horizontal"
       android:background="#228b22"
       android:layout_weight="1"
       android:layout_width="match_parent"
       android:layout_height="0dp">
      <Button
          android:id="@+id/normal_search"
          android:text="secure Search"
          android:onClick="secure"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="wrap_content" />
      <Button
          android:id="@+id/secure_search"
          android:text="Normal Search"
          android:onClick="normal"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="wrap_content" />
   </LinearLayout>

   <LinearLayout
       android:layout_weight="9"
       android:id="@+id/button_container"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:orientation="horizontal">

      <WebView
          android:id="@+id/webView1"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

   </LinearLayout>
</LinearLayout>

活動設計:

public class MainActivity extends Activity {
    //securely open the browser
    public String Url_secure="https://www..com";
    //normal purpouse
    public String Url_normal="https://www..com";

    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView=(WebView)findViewById(R.id.webView1);

    }
    public void secure(View view){
        webView.setWebViewClient(new SecureSearch());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(Url_secure);
    }
    public void normal(View view){
        webView.setWebViewClient(new NormalSearch());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(Url_normal);

    }
    public class SecureSearch extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String Url_secure) {
            view.loadUrl(Url_secure);
            return true;
        }
    }
    public class NormalSearch extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String Url_normal) {
            view.loadUrl(Url_normal);
            return true;
        }
    }
}

Android Manifest.Xml權限:

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

You face Problems when implementing this:    

1.getting Manifest權限
2.網址之間的空間過剩
3.檢查你的網址是否正確


你也可以這樣

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

 }

}

在清單不要忘記添加互聯網許可...


嘗試這個:

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,用戶使用“http://”鍵入一個URL。


在2.3中,我的運氣更好

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

區別在於使用Intent.ACTION_VIEW而不是字符串"android.intent.action.VIEW"


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

如果你想用XML編程而不是編程,你可以在你的TextView上使用:

android:autoLink="web"
android:linksClickable="true"

如果你想顯示用戶與所有瀏覽器列表的對話,那麼他可以選擇首選,下面是示例代碼:

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

}

我認為這是最好的

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

檢查你的網址是否正確。 對我來說,在URL之前有一個不需要的空間。


短碼版本...

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


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

粘貼下面的代碼,Android Intent直接使用URI(統一資源標識符)括號中的鏈接來標識鏈接的位置。

你可以試試這個:

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

試試這個OmegaIntentBuilder

OmegaIntentBuilder.from(context)
                .web("Your url here")
                .createIntentHandler()
                .failToast("You don't have app for open urls")
                .startActivity();

這種方式使用一種方法,允許您輸入任何字符串而不是固定的輸入。 如果使用重複次數,這會節省一些代碼行,因為您只需要三行來調用該方法。

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

使用這種方法可以普遍使用。 IT不必置於特定的活動中,因為您可以像這樣使用它:

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

由於此方法使用外部資源來顯示頁面,因此不需要聲明INternet權限。 顯示網頁的應用程序必須這樣做


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






android-browser