自分のアプリケーション内ではなく、内蔵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
これを試して:
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を事前入力するでしょう。
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")));
ハッピーコーディング!
2.3では、私はもっとうまくいった
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);
違いは、文字列Intent.ACTION_VIEW
ではなく"Android.intent.action.VIEW"
の使用です。
あなたは 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));
これを試して:
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);
すべてのブラウザリストとの対話をユーザに見せたいので、彼が好みを選択できるようにするには、以下がサンプルコードです。
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 :)
}
Webviewを使用して同じアプリケーションにURLをロードするその他のオプション
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
他の人が書いた解決策(それはうまくいく)と同じように、私は同じことに答えたいのですが、私が最も使うことを好むと思うヒントを付けて。
同じスタックに留まるのではなく、自分のものではなく、新しいタスクでアプリを開きたい場合は、次のコードを使用できます。
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)
}
あなたもこの方法で行くことができます
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");
}
}
マニフェストではインターネットの許可を追加することを忘れないでください...
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;
}
}
短いコードバージョン.
if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
strUrl= "http://" + strUrl;
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
あなたのtryブロック内に、次のコードを貼り付けてください。AndroidIntentは、リンクの場所を識別するために、URI(Uniform Resource Identifier)ブレース内のリンクを直接使用します。
これを試すことができます:
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));
startActivity(getWebPage);
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/
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
インテントによる単純な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" />
マーク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);
}
}
// 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);
}
}
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が有効かどうかを検証しました。
この方法では、メソッドを使用して、固定入力ではなく任意の文字列を入力できるようにします。このメソッドを呼び出すのに必要なのは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ページを表示するアプリはそれをする必要があります
私はこれが最高だと思います
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:
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*/
}
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;
}
}
基本的な紹介:
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"/>
これを実装するときあなたは問題に直面します:
Android.webkit.URLUtil
(file://
または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 を確認してください。
あなたのURLが正しいかどうか確認してください。私にとっては、URLの前に不要なスペースがありました。
これを試してください。私のために働きました!
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);
さて、私はすべての答えをチェックしましたが、ユーザーが使用したいのと同じ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);
ありがとうございました!
これを試してください OmegaIntentBuilder
OmegaIntentBuilder.from(context)
.web("Your url here")
.createIntentHandler()
.failToast("You don't have app for open urls")
.startActivity();