Фильтр намерений только для файлов

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

<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>

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

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

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

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

Заранее спасибо.


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


person Snicolas    schedule 03.09.2012    source источник
comment
Извините, что поднял старый вопрос, я попытался использовать категорию android.intent.category.OPENABLE и, похоже, работает. Он не показывает общий доступ к веб-странице из Chrome, он показывает общий доступ к файлам из Solid Explorer. Это безопасно использовать или лучше со схемами?   -  person Giorgio Aresu    schedule 31.01.2014
comment
@ Джорджио Аресу, неясно, о чем ты спрашиваешь. Оба варианта пробовали?   -  person Snicolas    schedule 31.01.2014
comment
Я пробовал оба. Со схемами, упомянутыми в ответах, мой даже не отображается при совместном использовании, с категорией openable он работает при совместном использовании файла из файлового менеджера, но не при совместном использовании обычного текста из браузера. Это то, что я хочу: получить файлы (все типы пантомимы), только файлы (не текст), именно то, что вы хотели в своем вопросе. Дальнейшее тестирование показало, что некоторые приложения (Photoshop Express, Gallery) совместно используют URI в виде обычного текста или в таких форматах, как изображение: 3710, которые не работают с открываемой категорией. Я пытаюсь разобраться...   -  person Giorgio Aresu    schedule 31.01.2014


Ответы (2)


мы хотим, чтобы в меню отображались все файлы, какой бы тип mime ни был

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

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

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

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

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

person CommonsWare    schedule 03.09.2012
comment
Используя это, мы больше не появляемся в меню общего доступа, ни в одном из установленных нами файловых менеджеров. - person Snicolas; 03.09.2012
comment
@Snicolas: Хорошо, попробуйте два элемента <intent-filter>, по одному для каждой схемы. - person CommonsWare; 03.09.2012
comment
Нет, это не сработало и с двумя фильтрами намерений, по одному на каждую схему. - person Snicolas; 03.09.2012
comment
Это решение правильное, но, возможно, в Intent, который делится файлом с вашим приложением, отсутствует информация о схеме. Я думаю, вам нужно позаботиться о содержании акции. - person Helton Isac; 05.10.2012
comment
Значит, нет способа отфильтровать намерения для обработки только файлов? - person android developer; 24.09.2015

  1. Если вы хотите, чтобы вас вызывали для любого типа пантомимы, не размещайте в фильтре ни одного типа шахты.
  2. scheme="file" — это ответ для работы только с файлами. Теперь, если стороннее приложение передает данные как content, то это (по определению) больше не файл.
person rds    schedule 03.09.2012
comment
Используя это, мы больше не появляемся в меню общего доступа, ни в одном из установленных нами файловых менеджеров. - person Snicolas; 03.09.2012