Как открыть 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;
Я также, вероятно, предварительно заполнил ваш EditText, который пользователь вводит URL-адрес с помощью "http://".
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
вместо строки "android.intent.action.VIEW"
Вы можете увидеть официальный образец от разработчика Android.
/**
* 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
во второй параметр, а новый Intent будет создан на основе заданного URL-адреса данных.
И затем просто вызовите startActivity(Intent intent)
, чтобы запустить новое действие, которое связано с намерением с заданным URL.
if
?Да. docs говорит:
Если на устройстве нет приложений, которые могут получить неявное намерение, ваше приложение выйдет из строя при вызове функции startActivity(). Чтобы в первую очередь проверить, существует ли приложение для получения намерения, вызовите функцию resolveActivity() для вашего объекта Intent. Если результат не равен нулю, существует хотя бы одно приложение, которое может обрабатывать намерение, и безопасно вызвать startActivity(). Если результат равен нулю, вы не должны использовать намерение, и, если возможно, вы должны отключить функцию, которая вызывает намерение.
Вы можете писать в одной строке при создании экземпляра 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));
или если вы хотите, чтобы в вашей активности открывался веб-браузер, выполните следующие действия:
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 :)
}
Как и другие решения, написанные (что хорошо работает), я хотел бы ответить на одно и то же, но с подсказкой, которую я думаю, что большинство предпочло бы использовать.
Если вы хотите, чтобы приложение, которое вы начали открывать в новой задаче, независимо от вас, вместо того, чтобы оставаться в одном стеке, вы можете использовать этот код:
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);
другой параметр В загрузочном URL-адресе в одном приложении с использованием Webview
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
Вы также можете пойти таким образом
В 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");
}
}
В Manifest не забудьте добавить разрешение на интернет...
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;
}
}
Внутри блока try, вставьте следующий код, Android Intent напрямую использует ссылку в идентификаторе URI (Uniform Resource Identifier), чтобы идентифицировать местоположение вашей ссылки.
Вы можете попробовать следующее:
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
Короткая версия кода...
if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
strUrl= "http://" + strUrl;
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
Теперь доступны пользовательские вкладки Chrome:
На первом этапе добавляется библиотека поддержки пользовательских вкладок в файл build.gradle:
dependencies {
...
compile 'com.android.support:customtabs:24.2.0'
}
Затем, чтобы открыть вкладку chrome custom:
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
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, а код для использования с С# и 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/
Простой, просмотр веб-сайта с помощью намерения,
Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.yoursite.in"));
startActivity(viewIntent);
используйте этот простой код для просмотра вашего сайта в приложении Android.
Добавить доступ к Интернету в файле манифеста,
<uses-permission android:name="android.permission.INTERNET" />
//Слушатель OnClick
@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);
}
}
android.webkit.URLUtil
имеет метод guessUrl(String)
, работающий отлично (даже с file://
или data://
), так как Api level 1
(Android 1.0). Использовать как:
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
В вызове Activity:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));
if (intent.resolveActivity(getPackageManager()) != null)
startActivity(intent);
Подробнее читайте guessUrl
code.
Я думаю, что это лучший
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-адреса. Для меня было нежелательное пространство перед URL.
Попробуйте этот OmegaIntentBuilder
OmegaIntentBuilder.from(context)
.web("Your url here")
.createIntentHandler()
.failToast("You don't have app for open urls")
.startActivity();
Хорошо, я проверил каждый ответ, но какое приложение имеет deeplinking с тем же URL, который пользователь хочет использовать?
Сегодня я получил этот случай и ответ browserIntent.setPackage("browser_package_name");
например.:
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);
Спасибо!
Этот способ использует метод, позволяющий вам вводить любую String вместо фиксированного ввода. Это сохраняет некоторые строки кода, если используется повторяющееся количество раз, так как вам нужно только три строки для вызова метода.
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;
}
Использование этого метода делает его универсальным. ИТ не нужно размещать в определенном действии, так как вы можете использовать его следующим образом:
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. Приложение, отображающее веб-страницу, должно сделать это
Попробуй это..Работа для меня!
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);
На основании ответа Марка Б и комментариев ниже:
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);
}
}
Основное введение:
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"/>
Вы сталкиваетесь с проблемами при реализации этого:
Если вы хотите сделать это с помощью XML не программно, вы можете использовать в своем TextView:
android:autoLink="web"
android:linksClickable="true"