Фильтр Intent для загрузки вложений из приложений gmail на Android

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

Я смог заставить кнопки загрузки и предварительного просмотра появиться на 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-контент и файл, и ни одна из них не является волшебной пулей.

РЕДАКТИРОВАТЬ::::::::

Я решил это вчера. Посмотрите мое решение:

 <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 отображать кнопки Download / Preview. Фактически, это также приведет к открытию вашего приложения, когда файлы .ext отправляются как вложения в обычный почтовый клиент.

Поскольку это один из главных вопросов в 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) и обнаружил, что в моем приложении text / plain достаточно (чтобы ваша домашняя работа находила подходящие 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> 
Intereting Posts