Фильтр намерений для загрузки вложений из приложений Gmail на Android - PullRequest
14 голосов
/ 16 ноября 2011

У меня есть приложение для Android с фильтром намерений (ACTION_VIEW), чтобы открыть файл и импортировать его в мое приложение. Я хочу загрузить файл приложения из приложения Gmail в свое приложение. Некоторые из типов файлов (например, jpg, png, txt) сохраняются правильно, а некоторые нет (т.е. doc, xls, ppt). Я считаю, что у меня есть правильный фильтр намерений для моей деятельности, так как он работает из другого приложения (например, Dropbox), но не из приложения Gmail. Есть ли решение для этого?

Ответы [ 2 ]

8 голосов
/ 18 января 2012

Мне удалось заставить всплывающие кнопки загрузки и предварительного просмотра на Android в GMail удалить фильтр данных схемы из моего намерения (удалить строку схемы и попробовать):

<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:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.ext" />
<data android:host="*" />
</intent-filter>

Однако, согласно документации Android, «если схема не указана для фильтра намерений, все остальные атрибуты URI игнорируются». После удаления атрибутов схемы и URI единственным другим способом фильтрации намерений является использование типа Mime, и все мы знаем, что пользовательские расширения файлов не имеют зарегистрированных типов MIME.

Для справки, URI имеют вид:

  • схема: // хост: порт / путь
  • PATHPREFIX
  • pathPattern

Так что без схемы все это падает. Обнаружив вышеизложенное, я попробовал очевидное - используйте «*» для схемы и даже попытался «. *». Ни один из тех не работал. Я надеюсь, что кто-то еще может построить мои испытания. Но я считаю, что это связано с выбором правильной схемы. К сожалению, единственные известные мне схемы - это http https содержимое и файл, и ни одна из вышеперечисленных не является волшебной пулей.

EDIT ::::::::

Я решил это вчера. Пожалуйста, посмотрите мое решение:

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/*" host="*" android:pathPattern=".*.ext" android:scheme="content" />
</intent-filter>

Это намерение приведет к тому, что в gmail будут отображаться кнопки «Скачать / Просмотр» Фактически, это также приведет к открытию вашего приложения, когда файлы .ext отправляются как вложения в обычный почтовый клиент.

0 голосов
/ 18 ноября 2016

Так как это один из главных вопросов в Google, связанный с «фильтром намерений вложений в gmail», и я обнаружил, что ответ выше не работает в моем случае, я публикую результаты своего исследования.

Для того, чтобы зарегистрироваться по намерениямиз gmail нам нужно поддерживать схему содержимого:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="content" android:mimeType="*" android:host="*" />
</intent-filter>

В случае проверенных вложений URI не содержал расширение файла, даже если оно отображалось в gmail, поэтому использование android: pathPattern блокировало получениеGmail намерений.

В связи с тем, что регистрация для всех mimeTypes является излишним, я отладил содержимое объекта Intent (на стороне Java) и обнаружил, что в моем приложении достаточно текста / обычного текста (так что ваша домашняя работачтобы найти подходящие mimeTypes для вашего приложения).Мой последний фильтр намерений выглядит так:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="content" android:mimeType="text/plain" android:host="*" />
</intent-filter>
...