Aru*_*tha 1282 url android android-intent android-browser
如何从内置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();
}
Run Code Online (Sandbox Code Playgroud)
但我有一个例外:
No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Run Code Online (Sandbox Code Playgroud)
Mar*_*k B 2362
试试这个:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
Run Code Online (Sandbox Code Playgroud)
这对我来说很好.
至于缺少的"http://"我会做这样的事情:
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "http://" + url;
Run Code Online (Sandbox Code Playgroud)
我也可能预先填充用户使用"http://"键入URL的EditText.
Jor*_*sys 80
String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));
Run Code Online (Sandbox Code Playgroud)
快乐的编码!
Mik*_*son 54
在2.3中,我运气好了
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
不同之处在于使用Intent.ACTION_VIEW
而不是String"android.intent.action.VIEW"
iti*_*skj 51
您可以在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);
}
}
Run Code Online (Sandbox Code Playgroud)
请看一下构造函数Intent
:
public Intent (String action, Uri uri)
Run Code Online (Sandbox Code Playgroud)
您可以将android.net.Uri
实例传递给第二个参数,并根据给定的数据URL创建新的Intent.
然后,只需调用startActivity(Intent intent)
以启动一个新的Activity,它与给定URL的Intent捆绑在一起.
if
检查声明吗?是.该文件说:
如果设备上没有可以接收隐式意图的应用,则当应用调用startActivity()时,您的应用会崩溃.要首先验证应用程序是否存在以接收意图,请在Intent对象上调用resolveActivity().如果结果为非null,则至少有一个应用程序可以处理意图,并且可以安全地调用startActivity().如果结果为null,则不应使用intent,如果可能,应禁用调用intent的功能.
您可以在创建Intent实例时在一行中编写,如下所示:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Run Code Online (Sandbox Code Playgroud)
nik*_*kki 30
试试这个:
Uri uri = Uri.parse("https://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));
Run Code Online (Sandbox Code Playgroud)
或者如果您想在您的活动中打开Web浏览器,请执行以下操作:
WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);
Run Code Online (Sandbox Code Playgroud)
如果您想在浏览器中使用缩放控件,那么您可以使用:
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
Run Code Online (Sandbox Code Playgroud)
Dmy*_*lyk 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 :)
}
Run Code Online (Sandbox Code Playgroud)
and*_*per 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);
Run Code Online (Sandbox Code Playgroud)
还有一种方法可以在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)
}
Run Code Online (Sandbox Code Playgroud)
小智 17
其他选项使用Webview在相同应用程序中加载URL
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)
Ari*_*ael 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" />
Run Code Online (Sandbox Code Playgroud)
在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");
}
}
Run Code Online (Sandbox Code Playgroud)
在Manifest中别忘了添加互联网权限......
Gib*_*olt 12
val browserIntent = Intent(Intent.ACTION_VIEW, uri)
ContextCompat.startActivity(context, browserIntent, null)
Run Code Online (Sandbox Code Playgroud)
我添加了一个扩展Uri
,使这更容易
myUri.openInBrowser(context)
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)
}
Run Code Online (Sandbox Code Playgroud)
作为奖励,这里有一个简单的扩展函数,可以安全地将字符串转换为 Uri。
"https://stackoverflow.com".asUri()?.openInBrowser(context)
fun String?.asUri(): Uri? {
try {
return Uri.parse(this)
} catch (e: Exception) {}
return null
}
Run Code Online (Sandbox Code Playgroud)
小智 10
所以我已经找了很长时间了,因为所有其他答案都打开该链接的默认应用程序,但不是默认浏览器,这就是我想要的。
我终于设法做到了:
// 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);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以注意到context
.whatever,因为我已将其用于静态 util 方法,如果您在活动中执行此操作,则不需要它。
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
短代码版本......
if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
strUrl= "http://" + strUrl;
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
Run Code Online (Sandbox Code Playgroud)
小智 6
在您的try块中,粘贴以下代码,Android Intent直接使用URI(统一资源标识符)括号内的链接来识别链接的位置.
你可以试试这个:
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)
小智 5
简单和最佳实践
方法一:
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*/
}
Run Code Online (Sandbox Code Playgroud)
方法二:
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*/
}
Run Code Online (Sandbox Code Playgroud)
简短而甜蜜的Kotlin辅助函数:
private fun openUrl(link: String) =
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link)))
Run Code Online (Sandbox Code Playgroud)