问题
in our app, we want to appear in the "Share via" menu. So we added this intent-filter to our activity :
<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>
It works and our app appears in the Share menu.
Nevertheless, the intent filter doesn't do exactly what we want to achieve :
- we want to appear in the menu for all files, whatever there mime type is
- we want to appear only for files. And up to now, if the user wants to share a simple text, as its mime type will be text/plain, our app appears in the menu and we don't want it.
What would the correct intent-filter be for all files and only for files ?
Thanks in advance.
We tried to add scheme=file and host="" or "*" and it doesn't work as many app use a scheme=content to share file based content.
回答1:
we want to appear in the menu for all files, whatever there mime type is
Try a MIME type of */*
.
we want to appear only for files. And up to now, if the user wants to share a simple text, as its mime type will be text/plain, our app appears in the menu and we don't want it. We tried to add scheme=file and host="" or "*" and it doesn't work as many app use a scheme=content to share file based content.
Then have two <data>
elements, one for a scheme of content
and one for a scheme of file
.
<data android:mimeType="*/*" />
<data android:scheme="content" />
<data android:scheme="file" />
However, bear in mind that a content
scheme does not mean that it is necessarily a file.
回答2:
- If you want to be invoked for any mime type, don't place a single mine type in the filter
scheme="file"
is the answer to run only on files. Now if the 3rd party applicaiton pass the data ascontent
, then it is (by defiinition) not a file any more
来源:https://stackoverflow.com/questions/12247957/intent-filter-for-files-only