Фильтр 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) не будет файл