Tôi đang viết một ứng dụng Android mà tôi muốn liên kết theo chương trình với thiết bị BLE tùy chỉnh. Tôi có liên kết thủ công trong đó người dùng nhập mã PIN bằng hộp thoại ghép nối Android Bluetooth chuẩn, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về cách tự động liên kết thiết bị BLE theo chương trình mà không cần sự can thiệp của người dùng. Điều đó có thể không? Nếu vậy, quy trình là gì?Liên kết lập trình với thiết bị BLE trên Android
Trả lời
Tất cả những gì bạn có thể làm để tránh tương tác của người dùng là bắt buộc ghép nối Hoạt động. Để làm điều đó, hãy lập trình thiết bị ngoại vi để chấp nhận ghép nối với khả năng IO của NoInputNoOutput.
Tôi đã có thể thực hiện công việc này KHUYẾT TẬT CỦA THỜI GIAN bằng cách đăng ký một BroadcastReceiver để nhận ý định BluetoothDevice.ACTION_BOND_STATE_CHANGED và sau đó gọi BluetoothDevice.setPin sau khi nhận được thông báo BluetoothDevice.BOND_BONDING. Như trường hợp với hầu hết các thứ BLE trong Android, điều này dường như hoạt động hơi khác nhau tùy thuộc vào thiết bị và phiên bản Android. Thật không may, tôi dường như không thể ngăn Android cũng nhận được ý định bluetooth, vì vậy màn hình nhập mã PIN vẫn bật lên trong một giây trước khi liên kết hoàn tất.
private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
final String action = intent.getAction();
Logger("Broadcast Receiver:" + action);
if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED))
{
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
if(state == BluetoothDevice.BOND_BONDING)
{
Logger("Bonding...");
if (mDevice != null) {
mDevice.setPin(BONDING_CODE.getBytes());
Logger("Setting bonding code = " + BONDING_CODE);
}
}
else if(state == BluetoothDevice.BOND_BONDED)
{
Logger("Bonded!!!");
mOwner.unregisterReceiver(mReceiver);
}
else if(state == BluetoothDevice.BOND_NONE)
{
Logger("Not Bonded");
}
}
}
};
Tôi đã làm được điều này - xem câu trả lời của tôi here.
TL; DR là: quên khoảng ACTION_BOND_STATE_CHANGED
; bạn không cần nó. Thay vào đó, hãy nghe theo số ACTION_PAIRING_REQUEST
và đặt mức độ ưu tiên cao. Trong bộ thu phát sóng khi bạn nhận được ACTION_PAIRING_REQUEST
, hãy gọi setPin()
bằng mã PIN và sau đó abortBroadcast()
để ngăn hệ thống hiển thị thông báo.
- 1. Android BLE GATT_ERROR (133) khi kết nối với thiết bị
- 2. Kết nối thiết bị USB với Trình giả lập Android?
- 3. Kết nối nhiều thiết bị qua Bluetooth trên Android (Kết nối nhiều BLE)
- 4. Tự động kết nối với thiết bị BLE đã biết
- 5. Phát hiện xem thiết bị BLE có thể kết nối được trên Android
- 6. Giao tiếp mạnh mẽ với nhiều thiết bị BLE đồng thời trên Android
- 7. Thay đổi ID thiết bị trên trình giả lập Android?
- 8. Chuyển đổi ngôn ngữ lập trình trên thiết bị Android
- 9. Khóa thiết bị Android theo lập trình
- 10. Android liệt kê các thiết bị BLE sau khi quét thiết bị
- 11. Có thể kết nối thiết bị Android Wear với thiết bị BLE khác trực tiếp mà không cần tương tác với thiết bị điện thoại không?
- 12. Android 4.4: Bluetooth Low Energy; Kết nối mà không cần quét thiết bị BLE
- 13. Lập trình kết nối với thiết bị Android trong Điểm phát sóng di động
- 14. Cách lấy mức pin sau khi kết nối với thiết bị BLE?
- 15. Chính xác, thiết bị được kết nối BLE trên iOS là gì?
- 16. BLE với Android 5.0: Cách để thiết bị hoạt động như Trung tâm và Máy chủ?
- 17. iOS cách kết nối lại với thiết bị BLE ở chế độ nền?
- 18. iOS: Tự động thiết lập lại kết nối Bluetooth BLE khi ở trong phạm vi
- 19. Tại sao ứng dụng không kết nối lại với thiết bị BLE khi đặt autoConnect thành true trong Android?
- 20. Lập trình Liên kết UIPageControl với UIScrollView
- 21. Screencapture có lập trình trên thiết bị di động
- 22. Swift 3: Không thể kết nối với thiết bị ngoại vi qua BLE
- 23. Android - liên lạc giữa hai thiết bị
- 24. Làm thế nào để thiết lập Android thiết bị ngày/giờ lập trình
- 25. Hiệu suất trình giả lập Android so với hiệu suất thiết bị thực như thế nào?
- 26. Android AnalogClock: thiết lập drawables lập trình
- 27. Android 2.2: Khởi động lại thiết bị theo lập trình
- 28. Cách xác định thiết bị Android theo cách lập trình?
- 29. Android 6.0 kẹo xốp marshmallow BLE: Kết nối thông số
- 30. Android BLE readCharacteristic failed
Hóa ra bạn không muốn 'ACTION_BOND_STATE_CHANGE'. Xem [câu trả lời khác của tôi] (http://stackoverflow.com/a/38241240/265521). – Timmmm