android - 我应该选择哪种应用程序间通信?

标签 android android-contentprovider communication broadcast

我需要 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/

相关文章:

Android 表头 View

Android:像 WhatsApp 一样监听联系人变化

android - Android 中的全局搜索是否仍然可供开发人员使用?

Java Inter Application Form通信观察者模式

java - ViewPager 与 Fragments 是不是太过分了?

android - "The surface has been released"错误

iphone - 手机动态文字溢出

android getContentResolver().notifyChange() 不重启我的装载机

java - java 到 javascript 的实时通信

php - 在 Windows 上使用 PHP 进行串行通信