2013-03-19 152 views
0

我正在写一个应用程序(在Android上)从蓝牙设备读取RSSI,以使用rssi指纹进行位置识别。我有工作代码,用于从非配对和可发现的非BT4.0/BLE蓝牙设备读取RSSI。我想知道如果我得到一些基于BLE的标签(例如stick-n-find),我是否可以通过将自己(我的android手机准确地)放入bt-discovery模式来阅读RSSI。来自蓝牙低功耗(BLE)标签的RSSI?

回答

2

在低能耗BT中,角色已切换。 The Stick-n-find将会是广告它的服务名称或其他信息。当您从iOS应用接收到该广告时,您将获得该广告的RSSI值。

所以才这样做:

@property (strong, nonatomic) CBCentralManager *CM; 

#define SERVICE_ID_STR  "4d1dc300-424d-13e2-a661-0002a55dc51b" 

self.CM = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber 
    numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; 
CBUUID *peripheralUUID = [CBUUID UUIDWithString:@SERVICE_ID_STR]; 
[self.CM scanForPeripheralsWithServices:[NSArray arrayWithObject:myUUID] 
    options:scanOptions]; 

那么当它听到从外围的广告包你会得到

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

你在哪里得到的RSSI。

如果你只想要一个回调didDiscoverPeripheral首次周围的一声,然后不使用ScanOptions

[self.CM scanForPeripheralsWithServices:[NSArray arrayWithObject:myUUID] options:nil]; 
+0

我真的很感谢你描述工作流程,甚至提供了iOS代码。我们还没有尝试过iOS,但很想知道这是如何在Android 4.2的Bluedroid栈中编码的。 – Bill 2013-03-20 10:48:11

0

从我所收集,一些Android手机厂商可能包括BLE的支持,但它目前不直接支持Android(从4.2版本开始)。有关更多信息,请参阅Issue 33371

看起来BLE可能会在下一个Android版本中出现,暗示在this Google Groups discussion