我怎样才能从我的应用程序在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 

尝试这个:

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

这对我来说很好。

至于缺less的“http://”我只是做这样的事情:

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

我也可能预先填充你的EditText,用户用“http://”键入一个URL。

一个常见的方法是用下面的代码:

 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而不是string"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实例传递给第二个参数,并根据给定的数据url创build一个新的Intent。

然后,只需调用startActivity(Intent intent)来启动一个新的Activity,这个Activity与给定的URL绑定在一起。

我需要if检查语句吗?

是。 文档说:

如果设备上没有可以接收隐式意图的应用程序,则在调用startActivity()时,您的应用程序将崩溃。 要首先validation应用程序是否存在以接收意图,请调用您的Intent对象上的resolveActivity()。 如果结果是非空的,至less有一个应用程序可以处理意图,并且可以安全地调用startActivity()。 如果结果为空,则不应使用该意图,并且如果可能,应该禁用调用意图的function。

奖金

您可以在创buildIntent实例时写入一行,如下所示:

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

或者如果你想要在你的活动中打开网页浏览器,那就这样做:

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

如果你想在你的浏览器中使用缩放控制,那么你可以使用:

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

如果你想显示用户与所有浏览器列表的对话,所以他可以select首选,这里是示例代码:

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

就像其他人写的解决scheme(工作正常)一样,我想回答同样的问题,但是我想大多数人更喜欢使用这个技巧。

如果你希望应用程序开始在一个新的任务,独立的,而不是停留在同一个堆栈,你可以使用这个代码的独立:

 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.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK); startActivity(intent); 

你也可以这样

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

在清单不要忘记添加互联网许可…

短码版本…

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

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; } } 
 Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink)); startActivity(getWebPage); 
 String url = "http://www.example.com"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 

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

简单的,通过意图的网站视图,

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

使用这个简单的代码来查看您的网站在Android应用程序。

在清单文件中添加Internet权限,

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

检查您的url是否正确。 对于我来说,在URL之前有一个不需要的空间。

基本介绍:

https://正在使用这个“代码”,以便两者之间无法读取它们。 这可以保护您的信息免受黑客的侵害。

http://正在使用共享的目的,这是不安全的。

关于你的问题:
XMLdevise:

 <?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> 

我认为这是最好的

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

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/

根据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" 

这种方式使用一种方法,允许你input任何string,而不是有一个固定的input。 如果使用重复的次数,这将节省一些代码行,因为您只需要三行来调用该方法。

 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权限。 显示网页的应用程序必须这样做

android.webkit.URLUtil的方法guessUrl(String) )从Api level 1 (Android 1.0)开始工作得很好(甚至是file://data:// )。 用于:

 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代码以获取更多信息。

试试这个..为我工作!

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