Филтър за намерения само за файлове

в нашето приложение искаме да се показваме в менюто „Споделяне чрез“. Така че добавихме този филтър за намерения към нашата дейност:

<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 ще бъде текст/обикновен, нашето приложение се появява в менюто и ние не го искаме.

Какъв би бил правилният филтър за намерения за всички файлове и само за файлове?

Благодаря предварително.


Опитахме се да добавим схема=файл и хост="" или "*" и това не работи, тъй като много приложения използват схема=съдържание за споделяне на базирано на файл съдържание.


person Snicolas    schedule 03.09.2012    source източник
comment
Съжалявам, че повдигнах стар въпрос, опитах се да използвам категория android.intent.category.OPENABLE и изглежда работи. Не показва споделяне на уеб страница от chrome, показва споделяне на файлове от Solid Explorer. Безопасно ли е да се използва това или е по-добре със схеми?   -  person Giorgio Aresu    schedule 31.01.2014
comment
@Giorgio Aresu, не е ясно какво питаш. Пробвахте ли и двата варианта?   -  person Snicolas    schedule 31.01.2014
comment
Пробвах и двете. Със схемите, както е споменато в отговорите, моята дори не се показва при споделяне, с openable като категория работи споделянето на файл от файловия мениджър, но не и споделянето на обикновен текст от браузър. Това е, което искам: получавам файлове (всички типове mime), само файлове (не текст), точно това, което искахте във вашия въпрос. Допълнителни тестове показаха, че някои приложения (photoshop express, gallery) споделят uris като обикновен текст или с формати като image:3710, които не работят с отваряема категория. Опитвам се да го разбера...   -  person Giorgio Aresu    schedule 31.01.2014


Отговори (2)


искаме да се появяват в менюто за всички файлове, независимо от типа mime

Опитайте MIME тип */*.

искаме да се показва само за файлове. И досега, ако потребителят иска да сподели прост текст, тъй като типът му mime ще бъде текст/обикновен, нашето приложение се появява в менюто и ние не го искаме. Опитахме се да добавим схема=файл и хост="" или "*" и това не работи, тъй като много приложения използват схема=съдържание за споделяне на базирано на файл съдържание.

След това имайте два <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
Не, не работи нито с 2 филтъра за намерения, по един за всяка схема. - person Snicolas; 03.09.2012
comment
Това решение е правилно, но вероятно намерението, което споделя файла с вашето приложение, няма информация за схемата. Мисля, че трябва да се погрижите за съдържанието на споделянето. - person Helton Isac; 05.10.2012
comment
Значи няма начин да филтрирате намеренията да обработвате само файлове? - person android developer; 24.09.2015

  1. Ако искате да бъдете извиквани за произволен тип mime, не поставяйте нито един тип mime във филтъра
  2. scheme="file" е отговорът да работи само върху файлове. Сега, ако приложението на трета страна предаде данните като content, то (по дефиниция) вече не е файл
person rds    schedule 03.09.2012
comment
Използвайки това, вече не се появяваме в менюто за споделяне, нито в нито един файлов изследовател, който инсталирахме. - person Snicolas; 03.09.2012