Search code examples
androidandroid-intentandroid-manifestintentfilterandroid-sharing

Specifying a SEND (sharing) intent filter for a Service


I am trying to filter and handle intents with android.intent.action.SEND actions in one of my Services. I wrote the following in my AndroidManifest.xml:

<service 
    android:name=".app.ScreamerService"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="*/*"/>
    </intent-filter>                                                                    
</service>

Now, the problem is that I don't see my application in the list of "share via" options when, for instance, trying to share a web page from the browser or a contact from the list of contacts. If, however, I move the intent filters to the main <activity> tag (instead of the <service>), my application name and icon do appear on the list of "share via" options.

What am I doing wrong here? Can't a SEND action be directed to a Service?


Solution

  • I am trying to filter and handle intents with android.intent.action.SEND actions in one of my services.

    ACTION_SEND is an activity action and therefore cannot be picked up by services or broadcast receivers.

    Now, the problem is that I don't see my application in the list of "share via" options when, for instance,

    That is because it is not an activity.

    Can't a SEND action be directed to a Service?

    Things that appear in a chooser (e.g.,. for ACTION_SEND) must be activities. Your activity is welcome to communicate with a service, though.