Mình đang viết một ứng dụng Android để kết nối với 1 thiết bị thông qua Bluetooth Low Energy. App đóng vai trò là peripheral, trong khi thiết bị đó là central. Do thiết bị không có giao diện xuất nhập (NoInputNoOutput) nên chế độ pairing sẽ là JustWorks.

Luồng hoạt động như sau:
- Mở app Android, chạy một kế nối tới Bluetooth Gatt Server (bluetoothManager.openGattServer())
- Thêm các BluetoothGattService vào BluetoothGattServer trên (service này chứa các characteristic với thuộc tính Indicate & Notify, và với quyền Read & Write)
- Sau khi thêm các service xong, gọi startAdvertising()
- Thiết bị sẽ quét và nhận được peripheral, sau đó gửi tín hiệu để pair đến phone.
- Phone nhận được tín hiệu pair, và sẽ hiển thị 1 dialog với 2 nút CANCEL - PAIR để người dùng xác nhận.

Khi mình test app với một số dòng điện thoại như Motorola Z,
Motorola G (Android 6) thì thấy nó hiện ra Pairing dialog như trên. Nhưng không hiểu sao với dòng khi test trên điện thoại Samsung Galaxy S7, Tab S2 (Android 7) thì không thấy có hiện ra.

Để tìm hiểu sự khác biệt, mình dùng WireShark để bắt gói tin gửi đi cho tín hiệu Pair từ phone sang device, thì nhận thấy đó là gói tin "
Sent Pairing Request: AuthReq" nhưng nếu là có Pairing dialog thì "Secure Connection Flag = 1" còn không có thì "Secure Connection Flag = 0"

Bạn nào rành về BLE có thể gợi ý giúp mình, liệu không phải tất cả các device Android đều hỗ trợ chế độ pairing JustWorks? Hoặc có cách nào để bật chế độ này trên Android không?
(Thêm thông tin là, mình có viết 1 cái app với luồng tương tự nhưng cho iOS thì thấy nó chạy được, có hiển thị Pairing dialog)


Chủ đề tương tự: