Возможно ли запустить веб-браузер из моего приложения и вернуть URL-адрес с кликом?

76
7

Интересно, возможно ли запустить веб-браузер из моего приложения, и когда пользователь нажимает URL-адрес, который следует за определенным шаблоном, он возвращает этот URL-адрес.


Пример:


http://domain.top-level-domain/download-folder/file-to-download.its-extension

Я не буду этого делать, потому что я создаю приложение со встроенной системой загрузки, и я хочу, чтобы пользователь мог легко выбрать файл для загрузки (просто щелкнув по URL-адресу). Процесс выглядит следующим образом:


    Вы заходите на свою личную страницу на веб-сайте.
    Вы просматриваете свои личные файлы.
    Вы выбираете файл, который хотите загрузить.
    Приложение автоматически загрузит и сохранит его для вас, когда вы нажмете URL-адрес файла.

Шаг 4 - это шаг, над которым я сейчас работаю, и не могу решить.

С внешним браузером процесс выглядел бы примерно так:


    Вы заходите на свою личную страницу на веб-сайте.
    Вы просматриваете свои личные файлы.
    Вы выбираете файл, который хотите загрузить.
    Вы копируете URL-адрес.
    Вставьте его в приложение.

Процесс может не выглядеть более сложным, но я хочу сделать это в любом случае.


EDIT: Я обнаружил, что ссылка для загрузки на этой странице была строкой javascript, которая отправила файл пользователю. Возможно ли выполнить эту строку кода на странице и получить файл в любом случае?

спросил(а) 2014-11-23T19:35:00+03:00 5 лет, 7 месяцев назад
1
Решение
55

Вы можете перехватить любой тип URI в WebView с помощью пользовательского WebViewClient:


webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("your_pattern")) {
// Your stuff...
return true;
}
return false;
}
});

Из официальной документации:

public boolean shouldOverrideUrlLoading (WebView view, String url)

Дайте хост-приложению возможность взять на себя управление, когда новый url уже загружен в текущем WebView. Если WebViewClient не предоставлено, по умолчанию WebView попросит Activity Manager выбрать правильный обработчик для URL. Если WebViewClient предоставлен, верните true означает, что приложение-хозяин обрабатывает URL-адрес, а возвращает false означает, что текущий WebView обрабатывает URL-адрес. Этот метод не называется для запросов с использованием метода POST.



Вы также можете рассмотреть метод shouldInterceptRequest().

ответил(а) 2015-04-18T14:51:00+03:00 5 лет, 2 месяца назад
66

Если вы управляете WebPage со ссылками, вы можете достичь этого с помощью пользовательского Url Intent
https://developer.chrome.com/multidevice/android/intents

Эта функция зависит от браузера, поэтому Chrome будет делать, но, возможно, другой браузер не...:(


Здесь у вас есть несколько примеров
Android ответит на URL в намерении
Запустить пользовательское приложение для Android от браузера android

В прошлый раз, когда я пробовал работать с 50/60% браузерами, так...

ответил(а) 2015-04-21T11:51:00+03:00 5 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема