android: проблема с настройкой фильтра намерений для отключения активности при загрузке файла из Интернета в браузере

#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: Извините, я, должно быть, неправильно запомнил поведение.