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.
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