#android #browser #intentfilter
#Android #браузер #intentfilter
Вопрос:
У меня возникла проблема с инициированием действия в ответ на загрузку файла из окна браузера.
Когда я нажимаю кнопку загрузки файла в broswer, он загружается на SD-карту, вместо того, чтобы запускать мою MainActivity (или даже запрашивать, что я должен с этим делать).
Если я затем найду файл на SD-карте с помощью проводника и выберу его, тогда запустится моя MainActivity.
Я неправильно понял, как работают фильтры намерений? Я проверил тип mime для загружаемого файла с помощью wireshark на ПК, чтобы убедиться, что он соответствует ожиданиям.
[Если я удалю шаблон пути и просто установлю mime-тип, то при нажатии кнопки загрузки мне будет предложено сообщить, что на устройстве нет ничего для обработки этого файла, и я все еще хочу продолжить загрузку.]
Будем признательны за любую помощь.
Вот запись из моего манифеста:
<activity android:name=".activity.main.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="application/xml-mydata"
android:pathPattern=".*\.mydata" />
</intent-filter>
</activity>
Комментарии:
1. ОК, с помощью pathPattern удалена загрузка файла ОК, мой предыдущий комментарий (к commonsware) о том, что он теперь вообще не работает, был неверным. Прочитал немного больше, особенно о DownloadManager, и я подозреваю, что поведение, которое я вижу, правильное. ie нажимает на кнопку, чтобы загрузить файл с веб-сайта, downloadManger загружает файл и сохраняет его на SD-карте. Мое приложение получает намерение только тогда, когда файл выбран в проводнике. Итак, я теперь смущен тем, что категория, доступная для просмотра, приносит на вечеринку. И возможно ли автоматически отключить активность для загружаемого файла?
2. Вы когда-нибудь находили способ сделать это?
Ответ №1:
Концептуально то, что у вас есть, кажется прекрасным, хотя я бы сбросил pathPattern
. Вот пример проекта, демонстрирующий такого рода <intent-filter>
элементы.
Я бы убедился, что ваш MIME-тип имеет допустимый синтаксис. Я совершенно забыл, разрешены ли тире.
Комментарии:
1. Тире, похоже, разрешены как часть синтаксиса mime (смотрите здесь iana.org/assignments/media-types/index.html для некоторых примеров). Пробовали без pathPattern, а затем type нигде не распознается как поддерживаемый.
2. @malcooke: Все, что я могу вам сказать, это попробовать мой образец приложения. Если это сработает — и это сработало, когда я пробовал это в последний раз, — тогда вам нужно начать определять, чем вы отличаетесь от того, что есть у меня. Например, возможно, что-то не так с типом MIME, который вы не улавливаете через Wireshark.
3. Хорошо, я настроил ваш образец приложения, и, похоже, он работает так же, как и мое приложение. ie не запускал программу просмотра pdf автоматически при загрузке файла. Поведение, которое я вижу, заключается в том, что файл загружается, а затем при выборе имени файла в уведомлении запускается программа чтения pdf. Просто чтобы убедиться, что по моему желанию это не было функцией htc sense, я повторил пробную версию на эмуляторе с тем же результатом. Возможно, это обычный способ работы?
4. @malcookie: Извините, я, должно быть, неправильно запомнил поведение.