web-dev-qa-db-ja.com

自分のアプリケーションからAndroid Webブラウザで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
1221
Arutha

これを試して:

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;

私はおそらくユーザーが "http://"でURLをタイプインしているというあなたのEditTextを事前入力するでしょう。

2270
Mark B

これを実現する一般的な方法は、次のコードを使用することです。

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

ハッピーコーディング!

75
Elenasys

2.3では、私はもっとうまくいった

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

違いは、文字列Intent.ACTION_VIEWではなく"Android.intent.action.VIEW"の使用です。

54
MikeNereson

簡単な答え

あなたは 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インスタンスを2番目のパラメータに渡すと、指定されたデータURLに基​​づいて新しいインテントが作成されます。

そして、単にstartActivity(Intent intent)を呼び出して、指定されたURLのIntentにバンドルされている新しいActivityを開始します。

ifチェックステートメントが必要ですか?

はい。 のドキュメント にはこう書かれています。

暗黙の意図を受け取ることができるアプリがデバイスにない場合、アプリはstartActivity()を呼び出すとクラッシュします。意図を受け取るためのアプリが存在することを最初に確認するには、Intentオブジェクトに対してresolveActivity()を呼び出します。結果がnull以外の場合は、その意図を処理できるアプリケーションが少なくとも1つあり、startActivity()を呼び出して安全です。結果がnullの場合は、意図を使用しないでください。可能であれば、意図を呼び出す機能を無効にする必要があります。

ボーナス

以下のようにIntentインスタンスを作成するときは、一行で書くことができます。

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

これを試して:

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

あるいは、あなたの活動の中でWebブラウザを開きたいのであれば、このようにしてください。

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

ブラウザでズームコントロールを使用したい場合は、次のものを使用できます。

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

すべてのブラウザリストとの対話をユーザに見せたいので、彼が好みを選択できるようにするには、以下がサンプルコードです。

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

}
22
Dmytro Danylyk

Webviewを使用して同じアプリケーションにURLをロードするその他のオプション

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

他の人が書いた解決策(それはうまくいく)と同じように、私は同じことに答えたいのですが、私が最も使うことを好むと思うヒントを付けて。

同じスタックに留まるのではなく、自分のものではなく、新しいタスクでアプリを開きたい場合は、次のコードを使用できます。

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

Chromeカスタムタブ でURLを開く方法もあります。コトリンでの例:

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

あなたもこの方法で行くことができます

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

 }

}

マニフェストではインターネットの許可を追加することを忘れないでください...

12
Aristo Michael

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;
    }
}
9
Gorav Sharma

短いコードバージョン.

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


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

あなたのtryブロック内に、次のコードを貼り付けてください。AndroidIntentは、リンクの場所を識別するために、URI(Uniform Resource Identifier)ブレース内のリンクを直接使用します。

これを試すことができます:

Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
6
Kanwar_Singh
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
4
Pradeep Sodhi
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);
3
TheOddAbhi

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

それから、クロムカスタムタブを開くには:

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

3
francisco_ssb

インテントによる単純なWebサイトの表示、

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

androidアプリであなたのウェブサイトを見るためにこの簡単なコードを使用してください。

マニフェストファイルにインターネット許可を追加します。

<uses-permission Android:name="Android.permission.INTERNET" /> 
2
stacktry

マーク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
divonas

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

    }
1
Faakhir
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 OSはデータのアクションビューを見つけることができません。したがって、URLが有効かどうかを検証しました。

1
Mayur Sojitra

この方法では、メソッドを使用して、固定入力ではなく任意の文字列を入力できるようにします。このメソッドを呼び出すのに必要なのは3行だけなので、繰り返し使用した場合、これによってコードの一部の行が節約されます。

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を使用できるため、ITを特定の活動に配置する必要はありません。

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

あるいは、アクティビティの外側で起動したい場合は、アクティビティインスタンスでstartActivityを呼び出すだけです。

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

これらのコードブロックの両方に見られるように、nullチェックがあります。意図を処理するアプリがない場合はnullが返されるためです。

プロトコルが定義されていない場合、このメソッドはデフォルトでHTTPになります。SSL証明書を持っていないWebサイト(HTTPS接続に必要なもの)があるためです。 。どのWebサイトでもHTTPSを強制的に使用する可能性があるため、どちらの方法でもHTTPSを使用することになります。


このメソッドはページを表示するために外部のリソースを使用するので、あなたがインターネットアクセス許可を宣言する必要はありません。 Webページを表示するアプリはそれをする必要があります

1
Zoe

私はこれが最高だと思います

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

シンプルでベストプラクティス

方法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*/
    }
0
Umasankar
dataWebView.setWebViewClient(new VbLinksWebClient() {
     @Override
     public void onPageFinished(WebView webView, String url) {
           super.onPageFinished(webView, url);
     }
});




public class VbLinksWebClient extends WebViewClient
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url.trim())));
        return true;
    }
}
0
Tuan Nguyen

基本的な紹介:

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.sharedpreferencesstackoverflow.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.stackoverflow.com";
    //normal purpouse
    public String Url_normal="https://www.stackoverflow.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"/>

これを実装するときあなたは問題に直面します:

  1. マニフェスト権限を取得する
  2. uRL間の余分なスペース
  3. URLのが正しいかどうかを確認してください
0
ballu

Android.webkit.URLUtilfile://またはdata://を使用しても)Api level 1メソッドは guessUrl(String) 正常に機能します。 )使用:

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 code を確認してください。

0
I.G. Pascual

あなたの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);
0
Debasish Ghosh

さて、私はすべての答えをチェックしましたが、ユーザーが使用したいのと同じURLでディープリンクを持っているアプリは何ですか?

今日、私はこのケースを得て、答えはbrowserIntent.setPackage("browser_package_name");です

e。 :

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

ありがとうございました!

0
Vaibhav Kadam

これを試してください OmegaIntentBuilder

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