我正尝试在我的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
操作定向到服务吗?
答案 0 :(得分:9)
我正试图在我的一个服务中使用android.intent.action.SEND操作过滤和处理意图。
ACTION_SEND
是一项活动行动,因此无法被服务或广播接收者接收。
现在,问题是我没有在“共享通过”选项列表中看到我的应用程序,例如,
那是因为它不是活动。
不能将SEND操作定向到服务吗?
选择器中出现的内容(例如,ACTION_SEND
)必须是活动。欢迎您的活动与服务进行沟通。
答案 1 :(得分:1)
这应该可行但是:
首先尝试使用广播接收器来获取意图并启动服务。
如果不起作用:
使用没有布局的虚拟活动。 (使主题半透明,并在处理意图后立即调用完成)。
此外,您的mime类型意味着您正在处理每种文件类型。那是你需要的吗?我认为你应该在选择中更精确。如果有人试图以你不支持的类型使用它,你会得到负面反馈。我的建议是测试类型并逐个添加它们,因为您确信可以处理它们。