8

我正在尝试通过我的一个s中的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操作定向到服务吗?

4

2 回答 2

10

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

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

现在,问题是我在“共享方式”选项列表中看不到我的应用程序,例如,

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

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

出现在选择器中的事物(例如,. for ACTION_SEND)必须是活动。不过,欢迎您的活动与服务进行通信。

于 2012-06-18T15:05:15.957 回答
1

这应该有效,但是:

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

如果这不起作用:

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

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

于 2012-06-18T14:45:11.050 回答