Tôi thấy một lỗi lạ trong iOS 8.3 và đang tự hỏi liệu có ai khác đang nhìn thấy cùng một thứ hay không.Lõi Bluetooth: CBPeripheral ngắt kết nối mỗi ~ 10 giây
Tôi có iPad Air (ở chế độ Trung tâm) và iPhone 6 (ở chế độ Ngoại vi) ở rất gần.
- My
CBCentralManager
được khởi tạo với một hàng đợi nền serial vàCBCentralManagerOptionRestoreIdentifierKey
tùy chọn - Người quản lý bắt đầu quét thiết bị ngoại vi sử dụng
CBCentralManagerScanOptionAllowDuplicatesKey: true
tùy chọn - Trong
centralManager:didDiscoverPeripheral:
tôi kiểm tra đối với một danh sách các thiết bị ngoại vi mà đã được phát hiện:
let connect:() ->() = { peripheral.delegate = self self.devices[peripheral.identifier.UUIDString] = peripheral self.manager.connectPeripheral(peripheral, options: nil) } if let device = devices[peripheral.identifier.UUIDString] { if device.peripheral.state == .Disconnected { connect() } } else if peripheral.state == .Disconnected { connect() }
- Sau khi kết nối, tôi khám phá các dịch vụ và đặc điểm.
Thiết bị ngoại vi hiện ngắt kết nối sau khoảng 10 giây, được phát hiện ngay lập tức và kết nối lại. 10 giây sau thủ tục này lặp lại chính nó.
Đây có phải là lỗi hay tôi đang làm điều gì sai ở đây?
Tôi cũng đã cố gắng đăng ký trực tiếp một đặc điểm trên thiết bị ngoại vi, nhưng điều này dường như không thay đổi bất cứ điều gì.
tôi sử dụng ứng dụng thử nghiệm của tôi trên một thiết bị iOS8.3 và tôi không thấy điều này - cả với một Fitbit Flex ngoại vi và một thiết bị iOS như một thiết bị ngoại vi. Có lý do cụ thể nào bạn đang đặt khóa cho phép trùng lặp không? Nó không phải là bình thường cần thiết và cống pin. Tôi không có vấn đề gì khi duy trì kết nối với thiết bị ngoại vi BLE trong nhiều giờ. – Paulw11
Cảm ơn Paul, tôi đang sử dụng khóa trùng lặp để thực hiện các tác vụ dựa trên RSSI. Bạn có kết nối với thiết bị ngoại vi một lần không? Bạn đọc/ghi/đăng ký đặc điểm nào? Giá trị cập nhật ngoại vi có liên tục không? Tôi nghĩ rằng nó có thể có một cái gì đó để làm với điều đó? – desktop
Tôi kết nối với thiết bị ngoại vi một lần. Nếu bạn muốn nhận được giá trị RSSI của thiết bị ngoại vi được kết nối, bạn có thể sử dụng phương pháp CBPeripheral 'readRSSI'. Mã mẫu của tôi không liên tục đọc/ghi hoặc thông báo về bất kỳ đặc tính nào – Paulw11