Android: «завершить действие, используя ...» для пользовательского WebView с намерением ACTION_VIEW для URL-адреса mp3 - PullRequest
0 голосов
/ 22 мая 2011

Если вы откроете URL-адрес mp3 в браузере Android, вы получите диалоговое окно «Выполнить действие, используя ...» с двумя вариантами: «Музыкальный проигрыватель» или «Браузер». Если вы выберете «Браузер», он будет загружать mp3 на устройство.

Я пытаюсь добиться того же в моем приложении. Я использую WebView с setWebViewClient для класса WebViewClient, который имеет метод shouldOverrideUrlLoading (как во всех примерах). Метод проверяет расширение «mp3» и startActivity (намерение) с намерением ACTION_VIEW для URL-адреса mp3.

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
   String lowcaseurl = url.toLowerCase();
   if (lowcaseurl.endsWith(".mp3")) {
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
       view.getContext().startActivity(intent);
       return true;
    }
    else {
       view.loadUrl(url);
    }
    return super.shouldOverrideUrlLoading(view, url)
}

В этом отображается диалоговое окно «Выполнить действие с помощью» - , но , если я выберу «Браузер», откроется браузер, но не получит URL! он просто открывает браузер и переходит к стандартному URL домашней страницы (в данном случае это google.com) ...

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Вы можете использовать:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity( Intent.createChooser(intent, "Open...") );

этим вы заставляете диалог "Завершить ..."

0 голосов
/ 29 мая 2011

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

Чтобы заставить музыкальный проигрыватель загрузить URL:

//...considering url contains the url string...
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "audio/*");
startActivity(intent);

Для принудительного начала загрузки:

Вам необходимо реализовать эту технику на стороне сервера ... но с несколькими исключениями:

Заголовок типа содержимого должен фактически содержать правильный mime-тип файла (а не «application / octet-stream»). Также лучше всего отправить заголовок «content-length» с размером файла - в противном случае могут возникнуть проблемы с загрузкой.

Если используется aspx: Response.TransmitFile лучше чем Response.WriteFile - и в этом случае Response.Buffer должен быть установлен в false.

...