从iOS应用程序中检测附近的移动设备

是否有可能创build一个iOS应用程序,可以扫描附近的移动设备(例如iPhone,Android,iPad等),而无需在附近的移动设备上运行任何定制应用程序?

我已经尝试使用CoreBluetooth,就像在我的iPhone 6+上运行一样:

[self.centralManager scanForPeripheralsWithServices:nil options:nil]; 

但唯一附近的设备,它检测到我的iMac,它不会检测到我的iPad Air 2,或我的蓝牙耳机。

难道我做错了什么?

核心蓝牙仅适用于蓝牙低功耗(又名蓝牙4.0)设备,而不是传统的蓝牙设备。 为了可被发现,设备必须通告一个或多个BLE服务。 你可以实现CBPeripheralManager来做到这一点,甚至有来自苹果的“扫描仪”和“外设”的示例代码 。 请注意,通过这种方式,您还可以发现或被其他移动设备(如Android智能手机)发现。

我不知道是否有可能检测到热点或切换BLE服务。 核心蓝牙不允许您访问“原始”蓝牙低功耗广告数据包,所以苹果可能会过滤掉一些东西。

如果您只想检测iOS设备(不包含其他BLE设备/附件),则也可以使用Multipeer连接性框架。 我个人觉得使用起来更容易一些,它甚至提供了一个内置的“发现设备”视图 。 但是你仍然需要在双方运行一个自定义的应用程序。

如果您使用的是蓝牙低功耗,则只能检测BLE设备的外围设备。 但是范围有限制。 通过文档,BLE设备范围在300米左右。您可以通过CBCentralManager外设方法获得信号强度:

 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

这里RSSI是你的信号强度,但是外围设备必须是BLE使能,即蓝牙版本4.0或以上

如果你不需要在App Store上放置任何东西,你可以越狱你的iPhone并直接访问数据包。

蓝牙伴侣 ,可在Cydia,将显示您的手机上的蓝牙数据包。 我不确定该项目的源代码是否可用,但是您可以查看其他项目,如BTStack (这里有一个很好的入门指南 )。

我将从参与embedded式系统开发的人员的angular度出发。 如前所述,BLE只能检测其他BLE设备的外围设备,因此我不认为蓝牙技术是检测附近移动设备的应用程序的最佳select。

您的应用程序应该包含两个检测function。 一个应该使用蓝牙来检测普通PC,并使用GPS来检测其他移动设备,因为它是唯一的其他外围设备,我相信是目前在Android和4G的iPad迷你等。

对于你的听筒,如果没有检测到,那么我不知道任何软件解决scheme,可以修改硬件不兼容,所以我会build议你得到一个兼容蓝牙设备的耳机。

你的问题不是软件问题,而在于设备的硬件限制。