Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Мне удалось заставить кнопки загрузки и предварительного просмотра появиться на 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 отправляются как вложения для обычного почтового клиента.

Ответ 2

Так как это один из главных вопросов в 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) и обнаружил, что в моем тексте приложения /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>