- Как я могу открыть URL-адрес в веб-браузере Android из моего приложения?
- 28 ответов:
- распространенный способ добиться этого заключается в следующем коде:
- это может быть изменено на короткую версию кода .
- самый короткий! :
- Простой Ответ
- как это работает
- мне нужно if проверить заявление?
- бонус
- Android load url in browser
- About
- Android load url in browser
- Какую библиотеку работы с HTTP в Android выбрать?
- Для чего это вообще?
- Немного истории
Как я могу открыть URL-адрес в веб-браузере Android из моего приложения?
Как открыть URL из кода во встроенном веб-браузере, а не в моем приложении?
Я попытался это:
но я получил исключение:
28 ответов:
это прекрасно работает для меня.
Что касается отсутствующего «http: / /» я бы просто сделал что-то вроде этого:
Я бы также, вероятно, предварительно заполнил ваш EditText, что пользователь вводит URL-адрес с помощью » http://».
распространенный способ добиться этого заключается в следующем коде:
это может быть изменено на короткую версию кода .
самый короткий! :
удачи в кодировании!
разница заключается в использовании Intent.ACTION_VIEW а не строка «android.intent.action.VIEW»
Простой Ответ
как это работает
пожалуйста, взгляните на конструктор Intent :
вы можете пройти android.net.Uri экземпляр для 2-го параметра, и новое намерение создается на основе данного url-адреса данных.
а потом, просто позвоните startActivity(Intent intent) чтобы начать новую деятельность, которая в комплекте с намерением с помощью заданный URL.
мне нужно if проверить заявление?
да. Элемент docs говорит:
если на устройстве нет приложений, которые могут получить неявное намерение, ваше приложение аварийно завершит работу при вызове startActivity(). Чтобы сначала убедиться, что приложение существует для получения намерения, вызовите resolveActivity() для объекта Intent. Если результат не равен нулю, есть по крайней мере одно приложение, которое может обрабатывать намерение, и его можно безопасно вызвать startActivity(). Если результат равен нулю, вы не должны использовать intent и, если это возможно, вы должны отключить функцию, которая вызывает intent.
бонус
вы можете написать в одной строке при создании экземпляра Intent, как показано ниже:
или если вы хотите, то веб-браузера в вашей деятельности, то делай так:
и если вы хотите использовать управление зумом в браузере, то вы можете использовать:
Если вы хотите показать пользователю Диалог со всем списком браузера, чтобы он мог выбрать предпочтительный, вот пример кода:
Так же, как и другие решения, написанные (которые работают нормально), я хотел бы ответить на то же самое, но с подсказкой, которую, я думаю, большинство предпочтет использовать.
Если вы хотите, чтобы приложение, которое вы начинаете открывать в новой задаче, независимо от вашего собственного, вместо того, чтобы оставаться в том же стеке, вы можете использовать этот код:
другой вариант в URL загрузки в том же приложении с помощью Webview
вы также можете пойти этим путем
в Манифесте не забудьте добавить разрешение в интернет.
Webview можно использовать для Загрузки Url-адреса в приложении. URL-адрес может быть предоставлен от пользователя в текстовом представлении или вы можете жестко его закодировать.
также не забывайте разрешения на интернет в AndroidManifest.
внутри в вашем блоке try вставьте следующий код, Android Intent использует непосредственно ссылку в скобках URI(Uniform Resource Identifier), чтобы определить местоположение вашей ссылки.
вы можете попробовать это:
хром пользовательские вкладки теперь доступны:
первым шагом является добавление библиотеки поддержки пользовательских вкладок в сборку.файл gradle:
и затем, чтобы открыть пользовательскую вкладку chrome:
ответ MarkB — Это верно. В моем случае я использую Xamarin, и код для использования С C# и Xamarin:
простой, просмотр веб-сайта с помощью намерения,
используйте этот простой код для просмотра вашего сайта в android-приложении.
добавить разрешение интернета в файл манифеста,
проверить, является ли URL-адрес является правильным. Для меня было нежелательное пространство перед url.
поместите код ниже в глобальный класс
на основе ответа от Марка B и комментариев ниже:
android.webkit.URLUtil имеет способ guessUrl(String) работает отлично (даже с file:// или data:// ) С Api level 1 (Android 1.0). Используйте как:
Регистрация полностью guessUrl код для получения дополнительной информации.
xml код: —
этот способ использует метод, позволяющий вводить любую строку вместо фиксированного ввода. Это позволяет сохранить некоторые строки кода, если они используются многократно, так как для вызова метода требуется всего три строки.
использование этого метода делает его универсальным. Он не должен быть помещен в определенную деятельность, так как вы можете использовать его следующим образом:
или если вы хотите запустить его вне действия, вы просто вызываете startActivity на действие пример:
как видно в обоих этих блоках кода есть нулевая проверка. Это так, как он возвращает null, если нет приложения для обработки намерения.
этот метод по умолчанию использует HTTP, если протокол не определен, так как есть веб-сайты, у которых нет сертификата SSL(что вам нужно для подключения HTTPS), и они перестанут работать, если вы попытаетесь использовать HTTPS, и его там нет. Любой веб-сайт все еще может принудительно перейти на HTTPS, поэтому эти стороны приземляют вас на HTTPS в любом случае
поскольку этот метод использует внешние ресурсы для отображения страницы, нет необходимости объявлять разрешение Интернета. Приложение, которое отображает веб-страницу так
хорошо, я проверил каждый ответ, но какое приложение имеет deeplinking с тем же URL, который пользователь хочет использовать?
Источник
Android load url in browser
Android Browser Switch
Android Browser Switch makes it easy to open a url in a browser or Chrome Custom Tab and receive a response as the result of user interaction, either cancel or response data from the web page.
📣 A new major version of the SDK is available in beta. See the v2 migration guide for details.
Add the library to your dependencies in your build.gradle :
Then, declare BrowserSwitchActivity in your AndroidManifest.xml :
Your app’s url scheme must begin with your app’s package and end with .browserswitch . For example, if the package is com.your-company.your-app , then your url scheme should be com.your-company.your-app.browserswitch .
$
Note: The scheme you define must use all lowercase letters. This is due to scheme matching on the Android framework being case sensitive, expecting lower case. If your package contains underscores, the underscores should be removed when specifying the scheme.
If these requirements are not met, an error will be returned and no browser switch will occur.
BrowserSwitchFragment is an abstract androidx.fragment.app.Fragment that should be extended and used to start and handle the response from a browser switch.
Note: The Activity that BrowserSwitchFragment attaches to cannot have a launch mode of singleInstance . BrowserSwitchFragment needs access to the calling Activity to provide a result and cannot do so if the browser switch happens on a different activity stack.
The url scheme to use to return to your app can be retrieved using:
This scheme should be used to build a return url and passed along in the browser switch to the target web page. This url can be loaded to return to the app from the target web page.
A browser switch can be initiated by calling:
The response will be returned in your implementation of BrowserSwitchFragment#onBrowserSwitchResult :
Alternative Usage: BrowserSwitchClient
For more fine-grained control over browser switching, BrowserSwitchClient can be used in scenarios where a custom BrowserSwitchListener is preferred.
This SDK abides by our Client SDK Deprecation Policy. For more information on the potential statuses of an SDK check our developer docs.
Major version number | Status | Released | Deprecated | Unsupported |
---|---|---|---|---|
2.x.x | Beta | February 2021 | TBA | TBA |
1.x.x | Active | June 2020 | TBA | TBA |
Android Browser Switch is open source and available under the MIT license. See the LICENSE file for more info.
About
Open a url in a browser or Chrome Custom Tab and receive a response as the result of user interaction.
Источник
Android load url in browser
Tutorial for SiGMobile to create a functional Android browser with Javascript and HTML enabled.
This tutorial will run you through learning the tools you need to create a browser application with a URL navigator
Open up Android Studio and create a new project. Create a Blank Activity. Set the minimum API to KitKat.
Create a WebView in your activity_main.xml the Text way. A WebView is a generic Android view that shows web pages.
in order for your Activity to access the Internet and load web pages in a WebView, you must add the INTERNET permissions to your Android Manifest file:
Instantiate a WebView object in your Main Activity, and find the WebView you created in your activity with the findViewByID Method. Enable Javascript with the setJavaScriptEnabled(boolean x) method, and load a URL.
Now that you have a working web browser, lets set up a URL navigator so you can go to different websites. Go to the Design tab of your activity_main.xml. Locate «Plain Text» under Text Fields on your palette.
Drag it over to your Device Screen and position it above your WebView. Also, delete the Hello World TextView.
Go back to your text tab of your activity_main and locate the EditText that was generated. You want to add two additional lines to specify that the text field will be taking URL’s. One sets it to a URL field, and the other adds an option to set up a reaction when the send button is pressed:
Same as you did with the WebView, instantiate the EditText object and link it with the View in your main activity XML
When you type in a URL and hit enter, you want Android to take the URL and load the website in your WebView. You can do that with an Activity Listener.
You want to create a Listener that will execute an action (loading the webpage) when a button (the enter key) is pressed.
In your listener, you are Overriding the onEditorAction method to listen for the enter key (ActionID=IME_ACTION_SEND), and loading the URL currently typed into the EditText when the key is pressed.
If you run your app at this time, you’ll notice that when you load a new URL, the default Browser app in Android opens. This happens because when the Intent to load the page is created, Android uses the default loader to load the webpage. For the page to load in your WebView, you want to override the intent to open the Browser. To do this, create a new Java Class that extends the WebViewClient class:
In this class, you want to override one method in the WebViewClient class called shouldOverrideUrlLoading(Webview, String) You want to return false if you are creating an Intent to load a webpage, so that it loads in your Webview and not the default Browser:
The last thing you need to do in your Main Activity class is to set the client to your child class instead of the generic WebViewClient class so that your code uses the overriden method you created in your class:
#Step 10 Run your App!
#Step 11 (Optional add-on)
You might notice if you press the back button, the app will exit. Traditionally, when you press the back button in a browser, it should go to the previous page. There is an easy way to set up this functionality in Android
To do this, Override the system method, onBackPressed(). Make it such that if your WebView can go back, it will go to the previous page. Else the method will call its super, or parent method in the Android system
Once you override the method, see Step 10!
#Congratulations, you created a functional Android browser!
Источник
Какую библиотеку работы с HTTP в Android выбрать?
Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?».
Для чего это вообще?
Немного истории
До Froyo HttpURLConnection имел некоторые не очень приятные баги. В частности, вызов close() у читаемого InputStream мог испортить пул соединений.
… большой размер их API мешает нам улучшать эту библиотеку без потери обратной совместимости. Команда Android не работает активно над Apache HTTP Client.
Apache HTTP client имеет мало багов на Eclair и Froyo, поэтому он является лучшим выбором для этих версий. А для Gingerbread и младше лучше подходит HttpURLConnection. Простота API и небольшой вес хорошо подходят для Android. Прозрачное сжатие и кэширование ответов помогают увеличить скорость и сохранить батарею. Новые приложения должны использовать HttpURLConnection.
Даже сегодня, если вы загляните в исходники Volley от Google (о ней я расскажу чуть попозже), вы сможете найти такое наследие:
Это классический пример фрагментации Android, которая заставляет страдать разработчиков. В 2013 году Square обратила внимание на эту проблему, когда выпускала OkHttp. OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android). Для упрощения перехода на их библиотеку, Square имплементировали OkHttp используя интерфейсы HttpUrlConnection и Apache client.
OkHttp получила большое распространение и поддержку сообществом, и, в конце-концов, Google решили использовать версию 1.5 в Android 4.4 (KitKat). В июле 2015 Google официально признала AndroidHttpClient, основанный на Apache, устаревшим, вместе с выходом Android 5.1 (Lolipop).
Сегодня OkHttp поставляется со следующим огромным набором функций:
- Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
- Объединение запросов уменьшает время ожидания (если SPDY не доступен)
- Прозрачный GZIP позволяет уменьшить вес загружаемой информации
- Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
- Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)
Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:
Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.
Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:
- Автоматическое планирование сетевых запросов
- Множество параллельных сетевых соединений
- Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
- Поддержка приоритизации запросов.
- Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
- Простота настройки, например, для повторов и отсрочек.
- Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
- Инструменты отладки и трассировки
Все, что ни есть в Volley, находится на вершине HttpUrlConnection. Если вы хотите получить JSON или изображение, то Volley имеет на это специальный абстракции, такие как ImageRequest и JsonObjectRequest, которые помогают вам в автоматическом режиме конвертировать полезную нагрузку HTTP. Так же достойно внимания то, что Volley использует жестко запрограммированный размер сетевого пула:
Когда OkHttp использует поток для каждого вызова с ThreadPoolExecutor с максимальным значением Integer.MAX_VALUE:
В результате, в большинстве случаев OkHttp будет действовать быстрее за счет использования бОльшего количества потоков. Если по каким-то причинам вы захотите использовать OkHttp вместе Volley, то есть реализация HttpStack, которая использует API запросов/ответов из OkHttp заместо HttpURLConnection.
HTTP клиенты продолжили развиваться для поддержки приложений с большим количеством картинок, особенно тех, кто поддерживает бесконечную прокрутку и трансформацию изображений. В то же время, REST API стал стандартом в индустрии, и каждый разработчик имел дело с такими типовыми задачами как сериализация в/из JSON и преобразование REST-вызовов в интерфейсы Java. Не прошло много времени, как появились библиотеки, решающие эти задачи:
- Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
- Picasso – мощная библиотека для загрузки и кэширования изображений под Android
Retrofit предоставляет некий мост между Java кодом и REST-интерфейсом. Он позволяет быстро включить в ваш проект HTTP API интерфейсы, и генерирует самодокументирующуюся реализацию.
В дополнение ко всему, Retrofit поддерживает конвертацию в JSON, XML, протокол буферов (protocol buffers).
Picasso, с другой стороны, предоставляет HTTP библиотеку, ориентированную на работу с изображениями. Например, вы можете загрузить изображение в свой View с помощью одной строчки:
Picasso и Retrofi настроены так, чтобы использовать OkHttpClient как стандартный HTTP клиент. Однако, если хотите, вы можете указать клиентом HttpURLConnection.
Glide – что-то похожее на Picasso. Он предоставляет некоторые дополнительные функции, такие как GIF-анимация, генерация миниатюрных эскизов изображения и неподвижные видео. Полное сравнение можно найти здесь.
Facebook недавно открыли общественности исходный код библиотеки Fresco, которую они используют в своем мобильном приложении. Одна из ключевых функций, которая выделяет ее, — кастомная стратегия выделения памяти для bitmap’ов, чтобы избежать работы долгого GC (сборщик мусора). Fresco выделяет память в регионе, который называется ashmem. Используются некие трюки, чтобы иметь доступ к этому региону памяти доступ как из части, написанной на C++, так и из части на Java. Чтобы уменьшить потребление CPU и данных из сети, эта библиотека использует 3 уровня кэша: 2 в ОЗУ, третий во внутреннем хранилище.
Я нашел необходимым показать отношения между библиотеками на одной схеме. Как вы можете увидеть, HTTP всегда остается внизу у высокоуровневых библиотек. Вы можете выбирать между простым HttpUrlConnection или последним OkHttpClient. Мы используем эту совместимость при разработке PacketZoom Android SDK, о котором мы поговорим в следующем посте.
Недавно мы сравнивали между собой HTTP библиотеки по производительности, но эта тема заслужила отдельного рассмотрения. Мы надеемся, что этот обзор дал вам основные идеи о плюсах и минусах каждой библиотеки, и мы помогли вам сделать правильный выбор. Следите за выходом более интересных постов о сетевой работе в Android от нас.
Источник