2013-03-21 32 views
8

Tôi đang phát triển một ứng dụng sử dụng khung Corebluetooth,corebluetooth Đọc RSSI lỗi: Thao tác đã bị hủy

và kết nối với thiết bị BLE để nhận giá trị RSSI.

tôi đặt một chức năng để đọc RSSI periodly, mã hẹn giờ dưới

NSTimer *timer; 
timer = [NSTimer scheduledTimerWithTimeInterval:1.2f target:self selector:@selector(detectRSSI) userInfo:nil repeats:YES]; 

và mã detectRSSI dưới

- (void)detectRSSI 
{ 
    [self.peripheral readRSSI]; 
} 

Vì vậy, câu hỏi là,

thức hoạt động của chức năng tốt, nhưng khi tôi đặt khoảng thời gian ít hơn 1,2 giây,

p eripheralDidUpdateRSSI sẽ báo cáo ngẫu nhiên thông báo lỗi như sau:

The operation was cancelled. 

Và điều đó sẽ không xảy ra nếu tỷ lệ lớn hơn 1,2 giây.

Có ai có ý tưởng nào đọc giá trị RSSI thường xuyên hơn (0,5 giây trở xuống) không?

+0

Có thể thử thay thế: ngoại vi.RSSI –

+2

RSSI không thay đổi nếu tôi chỉ gọi [ngoại vi RSSI] hoặc ngoại vi.RSSI. Giá trị sẽ được cập nhật sau khi gọi [readRSSI ngoại vi] .Tôi đã tìm thấy câu trả lời rằng giới hạn tần suất đọc được xác định bởi phần sụn. – momoyo

+0

Nếu bạn sử dụng BLE, hãy sử dụng 'didRangeBeacons:'. Thiết bị sẽ chỉ quét quá nhiều lần mỗi giây. – random

Trả lời

0

Tôi cũng gặp phải vấn đề tương tự. Đối với tôi, nó hoạt động khi tôi chỉ cần thêm sleep(2) vào bên trong peripheralDidUpdateRSSI. Đừng quên sử dụng hàng đợi nền khi khởi tạo CBCentralManager.

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error 
{ 
    NSLog(@"RSSI = %@", peripheral.RSSI); 
    sleep(2); 
    [self.connectedPeripheral readRSSI]; 
} 
Các vấn đề liên quan