Фильтр Intent для файлов

в нашем приложении, мы хотим появиться в меню "Поделиться через". Поэтому мы добавили этот фильтр намерений в нашу деятельность:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

Это работает, и наше приложение появляется в меню "Поделиться".

Тем не менее, фильтр намерений не выполняет именно то, что мы хотим достичь:

  • мы хотим появиться в меню для всех файлов, независимо от типа mime
  • мы хотим появляться только для файлов. И до сих пор, если пользователь хочет поделиться простым текстом, так как его тип mime будет текстовым/обычным, наше приложение появится в меню, и мы его не хотим.

Каким будет правильный фильтр намерений для всех файлов и только для файлов?

Спасибо заранее.


Мы попытались добавить схему = файл и host = "или" *", и это не работает, так как многие приложения используют схему = контент для совместного доступа к файловому контенту.

Ответ 1

мы хотим появиться в меню для всех файлов, независимо от типа mime

Попробуйте MIME-тип */*.

мы хотим появляться только для файлов. И до сих пор, если пользователь хочет поделиться простым текстом, так как его тип mime будет текстовым/обычным, наше приложение появится в меню, и мы его не хотим. Мы попытались добавить схему = файл и host = "или" *", и это не работает, так как многие приложения используют схему = контент для совместного использования содержимого на основе файлов.

Тогда есть два элемента <data>, один для схемы content и один для схемы file.

<data android:mimeType="*/*" />
<data android:scheme="content" />
<data android:scheme="file" />

Однако помните, что схема content не означает, что она обязательно является файлом.

Ответ 2

  • Если вы хотите, чтобы его вызывали для любого типа mime, не помещайте в фильтр один тип мины.
  • scheme="file" - это ответ на запуск только файлов. Теперь, если приложение стороннего участника передаст данные как content, тогда (через defiinition) не будет файл