Tôi vừa mới bắt đầu với khung nền tảng chính dành cho iOS và tôi đang phát triển một ứng dụng cần quét liên tục các thiết bị BLE để có thể lấy số RSSI của mình mỗi phút hoặc vì thế.Bluetooth chính - cập nhật RSSI liên tục của các thiết bị trong phạm vi
Hiện nay tôi có:
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
này bắt đầu quét ứng dụng của tôi cho các thiết bị BLE và gọi phương pháp này đại biểu khi một thiết bị được phát hiện:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
NSLog(@"Did discover peripheral. peripheral: %@ rssi: %@, UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID, advertisementData);
//Do something when a peripheral is discovered.
rssiLabel.text = [RSSI stringValue];
[manager retrievePeripherals:[NSArray arrayWithObject:(id)peripheral.UUID]];}
phương pháp này được tôi số RSSI của ngoại vi mà tôi có thể hiển thị. Dòng cuối cùng sau đó gọi phương thức delegate này:
- (void) centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals {
NSLog(@"Currently known peripherals :");
int i = 0;
for(CBPeripheral *peripheral in peripherals) {
NSLog(@"[%d] - peripheral : %@ with UUID : %@",i,peripheral,peripheral.UUID);
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
}
Mã này dường như được làm việc và làm một quét khoảng mỗi 1 phút, nhưng tôi không biết chính xác lý do tại sao nó làm việc ...
Các tài liệu trên bluetooth lõi là khá thưa thớt vì vậy nếu có ai có ý tưởng về cách làm điều này, hoặc có một cách tốt hơn để làm những gì tôi đang cố gắng để thực hiện tôi đánh giá cao sự giúp đỡ!
vẻ khi được làm việc ... bao lâu một lần RSSI cập nhật? EDIT: Một lần một phút?Tôi nghĩ rằng có một thời gian ra khi bạn không kết nối, để nó bắt đầu quét lại. – chwi
Tôi vừa mới bắt đầu đọc tài liệu, vì vậy bạn đang tiếp tục hơn I. Câu hỏi, tại sao bạn gọi scanForPeripheralsWithServices trong phương thức đại biểu didRetrievePeripherals? Bạn gọi nó là sau khi CBCentralManager được cấp phát. Điều này có thể gây ra việc quét lặp đi lặp lại mà bạn đã đề cập. – mkr707
chỉ hai xu của tôi cho> = 7.0: retrievePeripheralsWithIdentifiers cần sử dụng từ bây giờ trở đi. –