我需要 Android 中的推送逻辑消息广播功能,以将数据消息推送到订阅该内容的其他应用程序。订阅应用程序应注册过滤器设置和权限,以便它们只接收它们感兴趣的数据。这是为了确保不会连续进行不必要的传输,因为这会浪费资源。
Android 中是否有现成的机制来完成此任务?
我看过意向广播,但似乎我将数据打包为一个可打包的文件,我没有内置的过滤功能。我总是必须将所有数据发送到一个可打包的文件中,然后解压缩并提取我从那里感兴趣的一小部分(?)
然后我查看了 ContentProviders,但它们似乎不会将消息推送到收件人,而是使用类似 sql 的查询字符串查询要获取的内容。 ContentProvider 能否使用查询作为过滤器将消息推送到已注册的接收者?
也许是一个很难回答的问题,但我试一试;我应该使用哪种机制,还是必须自己编写?
最佳答案
Is there any ready-to-use mechanism in Android to accomplish this?
这取决于您希望将问题的哪一部分考虑为“准备好使用”。将数据推送到另一个应用程序是通过广播 Intents
处理的。
I have looked at intent broadcasts, but it seems as if I pack data as a parcelable I don't have a filter function built in. I will always have to send all of the data in one parcelable and then unpack and extract the small part that I am interested in from there(?)
您的应用会进行过滤,然后发送比赛广播。这是基于代理的“发布/订阅”推送模型采用的典型方法:代理进行过滤,仅通过通信 channel 向订阅者发送相关消息。例如,GCM 不会将发往每个设备的每个消息发送到每个设备,并期望设备进行自己的过滤——GCM 服务器进行过滤,然后将特定消息发送到特定设备。
在某些情况下,您可以利用 IntentFilter
功能为您进行过滤。例如,假设一条消息实际上代表一个文件。文件具有 MIME 类型。您可以在正在广播的 Intent
中包含文件的 MIME 类型,并且接收者可以通过他们的过滤器指定他们感兴趣的 MIME 类型。接收者只会收到来自相关广播的消息。
但是,对于更多任意类型的订阅(例如,“向我发送在某些 JSON 编码对象中具有特定值的所有消息”),您必须自己实现过滤。
Can a ContentProvider push messages onto a registered recipient using a query as a filter?
不,对不起。
关于android - 我应该选择哪种应用程序间通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895489/