2012-11-08 16 views

Trả lời

12

Khi bạn ngắt kết nối thiết bị với cancelPeripheralConnection phương thức ủy nhiệm didDisconnectPeripheral sẽ được gọi. Tuy nhiên, từ iOS 6.0 thiết bị vẫn được kết nối trong khoảng 40-50 giây (hoặc hơn), vì vậy không có didDiscoverPeripheral sẽ được gọi trong khung thời gian đó. Nếu bạn muốn "khám phá" nó một lần nữa chỉ cần gọi phương thức retrieveConnectedPeripherals và bạn sẽ nhận được tham chiếu trong didRetrieveConnectedPeripherals.

Tuy nhiên, giải pháp tốt nhất là lưu UUID của thiết bị và sử dụng để kết nối lại với phương pháp retrievePeripherals. Điều này sẽ gọi didRetrievePeripherals và bạn có thể kết nối lại với connectPeripheral. Đây là cách nhanh nhất để kết nối lại với thiết bị, không cần quét trong trường hợp này.

+0

Tôi đang tìm kiếm tương tự với Khung EAAccessory. Có thể không? Nếu có ai đó có thể hướng dẫn tôi "làm thế nào để"? Cảm ơn trước...:) –

2

Khi bạn thực hiện quét với scanForPeripheralsWithServices, thông thường sẽ chỉ thông báo cho bạn một lần cho địa chỉ thiết bị cụ thể. Bạn có thể thay đổi điều này để báo cáo các bản sao bằng cách chỉ định tùy chọn CBCentralManagerScanOptionAllowDuplicatesKey. Hoặc bạn có thể yêu cầu ứng dụng phát hiện thiết bị khác đã ngắt kết nối bằng cách hết thời gian chờ và khởi động lại quá trình quét của bạn.

2

Trong CoreBluetooth tất cả quản lý được thực hiện bởi lớp ứng dụng. Trong trường hợp của bạn, những gì tôi sẽ làm là lắng nghe để ngắt kết nối sự kiện hơn trong cùng một sự kiện, kết nối lại thiết bị ngoại vi. Phương pháp kết nối là phương thức rẻ tiền và đảm bảo bạn kết nối lại với thiết bị của mình khi thiết bị trở lại phạm vi phủ sóng.

Lưu ý rằng nếu bạn ngắt kết nối thiết bị rõ ràng, bạn đã nhận được cùng một sự kiện ngắt kết nối, nhưng bạn không phải gọi phương thức kết nối lại.