为服务指定SEND(共享)意图过滤器

时间:2012-06-18 14:20:54

标签: android android-intent android-manifest intentfilter android-sharing

我正尝试在我的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>

现在,问题是我没有在“共享通过”选项列表中看到我的应用程序,例如,尝试从浏览器共享网页或联系人列表中的联系人。但是,如果我将意图过滤器移至主<activity>标记(而不是<service>),则我的应用程序名称和图标执行会出现在“共享过程”列表中“选项。

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

2 个答案:

答案 0 :(得分:9)

  

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

ACTION_SEND是一项活动行动,因此无法被服务或广播接收者接收。

  

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

那是因为它不是活动。

  

不能将SEND操作定向到服务吗?

选择器中出现的内容(例如,ACTION_SEND)必须是活动。欢迎您的活动与服务进行沟通。

答案 1 :(得分:1)

这应该可行但是:

首先尝试使用广播接收器来获取意图并启动服务。

如果不起作用:

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

此外,您的mime类型意味着您正在处理每种文件类型。那是你需要的吗?我认为你应该在选择中更精确。如果有人试图以你不支持的类型使用它,你会得到负面反馈。我的建议是测试类型并逐个添加它们,因为您确信可以处理它们。