4

我需要 Android 中的推送逻辑消息广播功能,将数据消息推送到订阅内容的其他应用程序。订阅应用程序应注册过滤器设置和权限,以便它们只接收他们感兴趣的数据。这样可以确保不会连续进行不必要的传输,因为这会浪费资源。

Android中是否有任何现成的机制来实现这一点?

我看过意图广播,但似乎我将数据打包为一个可包裹我没有内置过滤功能。我总是必须将所有数据发送到一个包裹中,然后解包并提取一小部分我从那里感兴趣的(?)

然后我查看了 ContentProviders,但似乎它们不会将消息推送给收件人,而是使用类似 sql 的查询字符串来查询要获取的内容。ContentProvider 可以使用查询作为过滤器将消息推送到注册的收件人吗?

也许是一个复杂的问题要回答,但我试一试;我应该使用哪种机制,还是必须自己编写?

4

2 回答 2

1

Android中是否有任何现成的机制来实现这一点?

这取决于您希望将问题的哪一部分视为“即用型”。将数据推送到另一个应用程序是通过广播处理的Intents

我已经查看了意图广播,但似乎我将数据打包为一个 parcelable 我没有内置过滤功能。我总是必须将所有数据发送到一个 parcelable 中,然后解包并提取一小部分我从那里感兴趣的(?)

您的应用会进行过滤,然后发送比赛的广播。这是基于代理的“发布/订阅”推送模型采用的典型方法:代理进行过滤,仅通过通信通道向订阅者发送相关消息。例如,GCM 不会将发往每个设备的每条消息都发送每个设备,并期望设备进行自己的过滤——GCM 服务器进行过滤,然后将特定消息发送到特定设备。

在某些情况下,您可以利用IntentFilter功能为您进行过滤。例如,假设一条消息确实代表了一个文件。文件具有 MIME 类型。您可以在Intent广播中包含文件的 MIME 类型,接收者可以通过他们的过滤器指定他们感兴趣的 MIME 类型。接收者只会从相关广播中获得消息。

但是,对于更多任意类型的订阅(例如,“向我发送在某些 JSON 编码对象中具有特定值的所有消息”),您必须自己实现过滤。

ContentProvider 可以使用查询作为过滤器将消息推送到注册的收件人吗?

不,对不起。

于 2013-09-19T13:36:58.183 回答
1

1 您可以使用意图广播密钥以在应用程序中进行过滤,然后感兴趣的应用程序可以使用内容提供程序来获取完整数据。2 对不同的数据集使用不同的意图?

于 2013-09-19T13:18:14.553 回答