为啥蓝牙在android中需要DBUS通信方式?

Posted

技术标签:

【中文标题】为啥蓝牙在android中需要DBUS通信方式?【英文标题】:Why Bluetooth needs DBUS way of communication in android?为什么蓝牙在android中需要DBUS通信方式? 【发布时间】:2012-04-21 21:27:44 【问题描述】:

我是android DBUS的新手,最近我被告知我需要使用DBUS在Android中实现蓝牙,从DBUS文档中我看到DBUS用于两个应用程序之间的通信媒介。

    在 Android 应用程序中 - 应用程序通信是通过 Intents 进行的,如果是这样,为什么我们需要 DBUS 用于蓝牙? 由于 DBUS 是基于套接字构建的,因此它是否可用作两个应用程序之间的网络 (IP) 通信介质?

如果我的理解有误,请纠正我,感谢您提供有关 DBUS 以及 Android 中蓝牙实现的更多信息。

谢谢。

【问题讨论】:

【参考方案1】:

对于 Android 上的任何应用程序级编程,包括蓝牙,您无需担心 D-Bus。

关于使用 Intent 进行 Android 应用通信的说法是正确的 - Intent 是 Android 应用开发的基础。

在幕后,Android Intent 可以使用 D-Bus 实现,但据我了解,它们不是(如果我错了,请有人纠正我)。无论哪种方式,只有在进行系统级 Android 蓝牙开发时才需要担心这一点。

【讨论】:

我不确定 Google Android 意图是否是通过 DBUS 开发的,但也可能如您所说,但我看到蓝牙使用 DBUS 与 Android SystemServer 通信,因为 BLUZ 已实现在 C 中,应该有一些通过 BLUZ 进行通信的机制,因此它特别使用 DBUS 进行蓝牙堆栈,如果两个应用程序都是用 Java 编写的,则可以使用意图,因为有基于 C 的堆栈,它可能使用 DBUS 来实现这一点!我的理解可能有误,请纠正我 @RajeshSO,是的,我同意。 Intent 是 java-to-java,它们不适用于本地应用程序,因此像 BlueZ 这样的本地代码需要不同的通用 IPC:D-Bus。 最近我了解到意图不是 Android 中使用的 binder IPC 机制的更高抽象,并且它们与我之前认为的 DBUS 实现没有任何关系。 Binder 抽象是这样的 Intents -> AIDL -> Binder.【参考方案2】:

据我了解,以前的 android 使用 bluez 来实现蓝牙。 bluez 的实现依赖于 dbus。如果你是应用开发者,大多不需要关心蓝牙的内部实现,只需要使用level api和intent即可

【讨论】:

以上是关于为啥蓝牙在android中需要DBUS通信方式?的主要内容,如果未能解决你的问题,请参考以下文章

Android studio蓝牙app的串口是啥

Android 蓝牙通信方式总结

Android开发之蓝牙通信

Android中的线程或服务中的蓝牙通信?

使用蓝牙/wi-fi direct/BLE api 或任何其他方式与 android 设备通信 ios 设备

使用 DBus 和 Bluez 将数据写入蓝牙设备