2013-08-22 45 views
7

Sử dụng cả SDK Android BLE 2.0 Android 4.3/Samsung, điều quan sát thấy khi thiết bị ngoại vi bị tắt, SDK sẽ nhận được onConnectionStateChange (DEVICE_DISCONNECTED) ngay lập tức hoặc sau ~ 20 giây. Từ kinh nghiệm của tôi điều này phụ thuộc vào việc thực hiện ngoại vi, một số người trong số họ sẽ cố gắng báo cáo rằng họ đang bị tắt và một số chỉ không, do đó, SDK phải chờ ~ 20s cho thời gian chờ.Tắt ngoại vi gây ra hành vi không mong muốn

Để xóa hành vi này, tôi đã cố gắng sử dụng Bộ hẹn giờ để kiểm tra xem tôi có thể đọc một đặc tính nhất định hay không. Nếu đọc hết giờ, tôi sẽ gọi ngắt kết nối (Android 4.3)/cancelConnection (Samsung) để chấm dứt kết nối. Cuộc gọi chính nó thành công và cuộc gọi lại onConnectionStateChange trả lại trạng thái GATT_SUCCESS. Sau đó, tôi bật thiết bị ngoại vi và kết nối với nó ngay lập tức, khám phá các dịch vụ và gặp phải vấn đề khi tôi cố gắng đọc/ghi/thông báo bất kỳ thông báo nào. Bằng cách sử dụng LightBlue trong iOS, tôi có thể xác nhận rằng thiết bị ngoại vi không được kết nối.

Sau 20 giây khi tắt thiết bị ngoại vi, tôi sẽ nhận được cuộc gọi lại DEVICE_DISCONNECTED. Tôi kết nối lại sau đó, và mọi thứ hoạt động tốt.

Có hai câu hỏi: 1. Có phải chúng ta phải kết nối với thiết bị ngoại vi trong thời gian trễ 20 giây không? 2. Có cách nào để nhận thông báo khi thiết bị ngoại vi bị tắt không?

Xin cảm ơn trước.

Trả lời

1
  1. Chúng ta có phải kết nối với thiết bị ngoại vi trong thời gian trễ 20 giây không? Không, Có vẻ như từ bạn kết quả bản thân rằng hệ điều hành được thực hiện một số hành động trong điện thoại để kiểm soát DEVICE_CONNECTED hoặc DEVICE_DISCONNECTED sự kiện, này có thể là do một số lý do như kiến ​​trúc thiết bị, lý do an ninh hoặc gọi lại bản thân bị trì hoãn để tiết kiệm năng lượng

  2. Có cách nào để nhận thông báo khi thiết bị ngoại vi bị tắt không? Không, tôi không nghĩ như vậy, Sự kiện nhận được cho bất kỳ hành động nào được phát sóng để chờ tín hiệu từ thiết bị tự nó nhưng không nhận được tín hiệu, điều duy nhất bạn có thể làm ở đây là gửi qua một số chương trình phát sóng khác (hoặc HTTP yêu cầu) từ đầu kia của thiết bị để đạt được nó

+0

Bạn có thể giải thích thêm một chút về những gì đang diễn ra trong thời gian trễ 20 giây không. Nó có vẻ không hợp lý mà tôi có thể gọi ngắt kết nối trong thời gian mà không nhận được lỗi. – reTs

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