Как я могу открыть URL-адрес в веб-браузере Android из моего приложения?
Как открыть 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
28 ответов:
попробуйте это:
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://".
распространенный способ добиться этого заключается в следующем коде:
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экземпляр для 2-го параметра, и новое намерение создается на основе данного url-адреса данных.а потом, просто позвоните
startActivity(Intent intent)чтобы начать новую деятельность, которая в комплекте с намерением с помощью заданный URL.мне нужно
ifпроверить заявление?да. Элемент docs говорит:
если на устройстве нет приложений, которые могут получить неявное намерение, ваше приложение аварийно завершит работу при вызове startActivity(). Чтобы сначала убедиться, что приложение существует для получения намерения, вызовите resolveActivity() для объекта Intent. Если результат не равен нулю, есть по крайней мере одно приложение, которое может обрабатывать намерение, и его можно безопасно вызвать startActivity(). Если результат равен нулю, вы не должны использовать intent и, если это возможно, вы должны отключить функцию, которая вызывает intent.
бонус
вы можете написать в одной строке при создании экземпляра 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"); } }в Манифесте не забудьте добавить разрешение в интернет...
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 вставьте следующий код, Android Intent использует непосредственно ссылку в скобках 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);
хром пользовательские вкладки теперь доступны:
первым шагом является добавление библиотеки поддержки пользовательских вкладок в сборку.файл 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
ответ 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/
простой, просмотр веб-сайта с помощью намерения,
Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.yoursite.in")); startActivity(viewIntent);используйте этот простой код для просмотра вашего сайта в android-приложении.
добавить разрешение интернета в файл манифеста,
<uses-permission android:name="android.permission.INTERNET" />
проверить, является ли URL-адрес является правильным. Для меня было нежелательное пространство перед url.
Я думаю, что это лучший
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); }
на основе ответа от Марка 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); } }
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в вызова:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link))); if (intent.resolveActivity(getPackageManager()) != null) startActivity(intent);Регистрация полностью
guessUrlкод для получения дополнительной информации.
/ / Onclick Listener
@Override public void onClick(View v) { String webUrl = news.getNewsURL(); if(webUrl!="") Utils.intentWebURL(mContext, webUrl); }/ / Ваш Метод Util
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); } }
попробуйте это..Работал на меня!
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);
этот способ использует метод, позволяющий вводить любую строку вместо фиксированного ввода. Это позволяет сохранить некоторые строки кода, если они используются многократно, так как для вызова метода требуется всего три строки.
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 в любом случае
поскольку этот метод использует внешние ресурсы для отображения страницы, нет необходимости объявлять разрешение Интернета. Приложение, которое отображает веб-страницу так
хорошо, я проверил каждый ответ, но какое приложение имеет 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);спасибо!
попробуйте это OmegaIntentBuilder
OmegaIntentBuilder.from(context) .web("Your url here") .createIntentHandler() .failToast("You don't have app for open urls") .startActivity();
Введение:
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.Xml permissions:
<uses-permission android:name="android.permission.INTERNET"/>вы сталкиваетесь с проблемами при реализации этого:
- получение Манифест разрешения
- избыточное пространство между url
- Проверьте url-адрес правильно или нет
Если вы хотите сделать это с XML не программно вы можете использовать на вашем TextView:
android:autoLink="web" android:linksClickable="true"
Comments