安卓 <-> 苹果直接通信(蓝牙)。这是可能的吗?

17

首先,我是一名Android开发人员,所以这个问题是问所有iOS开发人员的。

是否有可能实现Android和iPhone/iPad之间的直接通信?
有些人声称不可能,而有些人则声称可以。

我想两种可能的技术是蓝牙和/或Wi-Fi Direct。
不建议使用Wi-Fi Direct,因为它不受Gingerbread支持,据我所知,iPhone也不支持它(也许iPhone 6支持,据传闻)

已经知道在iOS设备之间通过GameKit实现了蓝牙通信,这里有一个参考文献

我不明白与GameKit通信时有何特殊之处
消息是否被包装在某些额外字节的消息开头和结尾?好的,我们可以用同样的方式在Android中包装消息!
消息加密了吗?!! 如果是这样,在Android设备接收到消息时,我们能否解密它们?

任何想法,解决方法或其他黑客式的解决方案都非常欢迎!


2
好的,你所提到的重复问题已经在一年前被问过了。有人会期望关于这个问题的最新更新。但是感谢你提供链接。 - George Pligoropoulos
但是我仍然找不到一个好的答案,因为我猜测Android蓝牙API是一个更高级别的(就像使用输入输出流一样容易),而对于iOS解决方案,你必须深入挖掘,从我所知道的来看...相关信息请参见此链接:http://is.gd/i2UbhE - George Pligoropoulos
1
也许有些延迟,但技术已经发展了:目前iOS和Android之间的连接可以通过BLE实现,但仍然有很多Android不支持BLE Peripheral模式,而且Android BLE堆栈非常不稳定。此外,WiFi Direct在Android上得到支持,但在iOS上尚未公开提供。如果我可以的话,我建议您查看可以为您执行跨平台p2p的框架,以便您不需要花费时间编写网络代码。这样的框架可能是我正在使用的名为http://p2pkit.io或Google Nearby的框架。 - p2pkit
3个回答

16

在iOS中,有三种框架可用于开发蓝牙应用:

1. GameKit: 这是公开可用的框架。但使用它只能建立并在两个iOS设备之间进行通信。所以这个框架有其自身的限制。

2. BluetoothManager: 这是私有框架。我用这个框架来发现非iOS设备,也成功建立了连接。但无法进行数据交换。我认为它仍在开发中。您可以参考此链接

3. CoreBluetooth: 这也是公开的框架。它只能发现启用BLE的设备。我已成功使用它在启用BLE的设备之间传输数据。


1
你说过你通过CoreBluetooth成功地在BLE设备之间传输了数据。你是和什么样的BLE设备进行通信的?你能否确认你已经成功地将数据传输到像三星Galaxy S4或Nexus 4这样的Android设备上?还是只是一个BLE引脚?@V-Xtreme - klefevre
@kl94:对于数据传输,您只需要两个启用BLE的设备,无论它们是iOS设备、Android设备还是BLE调制解调器。如果您能够呈现外围设备、服务和特征等级,您可以根据特征的属性(即读取/写入/通知)执行任何操作。 - V-Xtreme
提醒一下那些在尝试 CoreBluetooth 的人,这里有一个由 Apple 提供的示例源代码链接:https://developer.apple.com/library/ios/samplecode/TemperatureSensor/Listings/TemperatureSensor_main_m.html#//apple_ref/doc/uid/DTS40012194-TemperatureSensor_main_m-DontLinkElementID_12 - Art Geigel
我有一个名为 "socketMobile" 的条码传感器设备。当我实现CoreBluetooth选项时,该设备未出现在列表中。我如何知道设备是BLE还是普通蓝牙?之后我实现了BluetoothManager.framework,这个库能够正常工作。但当我尝试编译时,xcode(或itunnes connect)会显示问题,因为这是一个私有库。我需要其他解决方案,谢谢。 - jose920405
@V-Xtreme,我能否连接到启用了BLE的云台,并从iOS应用程序发送命令以更改其运动?您有此类通信的示例链接吗? - Hemang

3
iOS没有实现任何标准的蓝牙协议,使得它无法与其他操作系统进行通信。GameKit是专有的,如果它很容易被攻破,那么人们早就已经这么做了(而且苹果也会堵上这个漏洞)。
只有少数Android设备支持蓝牙LE(它还没有进入AOSP),所以即使它支持点对点,也不会很有用。
我已经阅读过,你可以通过Wi-Fi直连来实现你想要的功能,例如使用这个库:https://www.alljoyn.org/。它说它支持Android和iOS-我自己没有试过,但它似乎能够做到你想要的。

1

对于在同一本地网络上的设备,Bonjour(又称为zeroconf)可以是不同机器/设备上的进程相互发现和交互的好方法。

请参阅苹果的Android Bonjour,了解有关Bonjour的Android实现的一些指针。


同一本地网络?不是!设备并不属于本地网络。事实上,既没有网络,也没有互联网。这就是为什么我提到了wifi-direct而不是简单的wifi,也是为什么蓝牙很重要的原因。 - George Pligoropoulos
嗨,@Caleb,我需要创建自己的应用程序来进行这样的通信,这可能吗? - Gopi.cs
虽然我无法发现在我的iPhone上运行的Bonjour服务(CocoaHTTP库),但我能够硬编码iPhone热点的IP地址(默认为170.20.10.1)和端口,并在Android上连接到它并检索托管在iPhone上的网页。 - Fraggle
我认为问题涉及p2p直接通信。在这种情况下,iOS上的Bonjour C库并没有帮助,因为:它使用封闭源代码实现来检测经典蓝牙连接中的p2p设备,而这在Android上不受支持。 - p2pkit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接