2014-10-22 17 views
6

Ở cuối trung tâm, đại biểu CBPeripheral sẽ được gọi trong khi kết nối hoặc ngắt kết nối. Nhưng làm thế nào để một CBPeripheralManager biết rằng nó được kết nối hoặc bị ngắt kết nối bởi một thiết bị trung tâm? Ngoài ra, thiết bị ngoại vi có thể từ chối yêu cầu kết nối từ thiết bị trung tâm không?Làm thế nào để một CBPeripheralManager biết nó được kết nối hoặc ngắt kết nối bởi một thiết bị trung tâm trong Core Bluetooth?

Trả lời

5

Bạn không nhận được thông báo cụ thể khi trung tâm kết nối với dịch vụ ngoại vi do ứng dụng của bạn cung cấp. Bạn có thể suy ra một kết nối từ CBPeripheralManagerDelegate phương pháp sau đây được gọi là -

  • didSubscribeToCharacteristic
  • didReceiveReadRequest
  • didReceiveWriteRequest

Nếu bạn đã nhận được một thuê bao thông qua didSubscribeToCharacteristic sau đó bạn có thể suy ra một ngắt kết nối khi bạn nhận được một cuộc gọi tương ứng với didUnsubscribeFromCharacteristic. Nếu trung tâm không sử dụng các mục đăng ký thì bạn không có dấu hiệu nào cho thấy chúng đã bị ngắt kết nối - bạn sẽ không nhận được bất kỳ yêu cầu đọc/ghi nào nữa.

Bạn không thể từ chối kết nối từ trung tâm. Bạn có thể đặt yêu cầu mã hóa trên một hoặc nhiều đặc điểm của mình. Điều này sau đó sẽ bắt đầu một quá trình ghép nối dựa trên pin khi một lần đầu tiên trung tâm cố gắng đọc/ghi/thông báo về đặc tính đó.

Bạn cũng có thể triển khai một số hình thức xác thực trong đó trung tâm cần phản hồi thử thách/viết mật khẩu cho một đặc tính, vv trước khi bạn trả lời các yêu cầu đọc/ghi khác của trung tâm đó.

+0

Xin chào Paulw11, cảm ơn câu trả lời của bạn. Nhưng tôi không chắc chắn về quá trình xây dựng kết nối được khởi tạo bởi trung tâm. Có nghĩa là trung tâm chỉ đọc tín hiệu phát sóng từ thiết bị ngoại vi trong khi kết nối, mà không thông báo cho thiết bị ngoại vi miễn là nó không làm bất cứ điều gì về các đặc tính? –

+0

Không, ở lớp Bluetooth có thông báo cho thiết bị ngoại vi rằng kết nối đang được khởi tạo và một số giao tiếp diễn ra để thiết lập kết nối, nhưng khung Core Bluetooth không hiển thị phương thức ủy quyền để thông báo cho CBPeripheral rằng kết nối đã được thực hiện – Paulw11

+0

@Paulw bạn có biết lý do đằng sau không tiết lộ thông tin này không? Ngoài ra, có cách nào để mô phỏng một liên kết BTLE "xấu" (như chúng ta có thể nói liên kết WiFi sẽ giảm 50% các gói bằng cách sử dụng Cài đặt -> Nhà phát triển)? –

Các vấn đề liên quan