为服务指定SEND(共享)意图filter

我想过滤和处理意图与android.intent.action.SEND行动中的一个我的Service 。 我在我的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> 

现在,问题是,例如,当试图从浏览器或联系人列表中分享一个网页时,我看不到我的应用程序在“共享通过”选项。 但是,如果我将意图filter移动到主<activity>标记(而不是<service> ),我的应用程序名称和图标确实出现在“share via”选项列表中。

我在这里做错了什么? 无法将SEND操作定向到服务?

    我想在我的一个服务中使用android.intent.action.SEND操作来过滤和处理意图。

    ACTION_SEND是一个活动动作,因此不能被服务或广播接收器接收。

    现在,问题是,我没有看到我的应用程序在“共享通过”选项,例如,

    那是因为它不是一个活动。

    无法将SEND操作定向到服务?

    出现在select器中的事物(例如,对于ACTION_SEND )必须是活动。 不过,欢迎您的活动与服务进行沟通。

    这应该工作,但是:

    先试着用广播接收机来获取意图,然后启动你的服务。

    如果这不起作用:

    使用没有布局的虚拟活动。 (使主题半透明,并在处理意图后立即完成)。

    另外你的mimetypes意味着你正在处理每一个文件types。 那是你需要的吗? 我认为你应该在select时更加精确。 如果有人试图用你不支持的types来使用它,你会得到负面的反馈。 我的build议是testingtypes并逐个添加,因为您可以自信地处理它们。