2015-10-01 36 views
5

ứng dụng của tôi sẽ kết nối với thiết bị Bluetooth LE. Thông thường, bạn thực hiện quét thiết bị bằng cách sử dụng mBluetoothAdapter.startLeScan(mLeScanCallback);. Cuộc gọi lại cung cấp cho bạn thông tin về các thiết bị có sẵn.Android 4.4: Bluetooth Low Energy; Kết nối mà không cần quét thiết bị BLE

Nếu bạn muốn kết nối với một thiết bị chuyên dụng, bạn làm điều gì đó như

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 

và sau đó

mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 

Đối với tôi có vẻ như điều duy nhất bạn cần phải kết nối với một thiết bị BLE , là để biết địa chỉ BLE và sau đó kết nối với nó với hai bước trên. Vì vậy, nếu tôi biết địa chỉ BLE đã có (ví dụ: nó được ghi trên nhãn của thiết bị BLE), tôi không cần thực hiện quét BLE.

Nhưng những gì tôi gặp phải là nếu tôi có thiết bị BLE mà trước đây tôi chưa từng tìm thấy qua lần quét BLE, thì không thể kết nối trực tiếp với nó bằng địa chỉ BLE của nó. Tôi phải tìm nó thông qua một lần quét ít nhất một lần với điện thoại Android của tôi. Sau đó tôi không bao giờ cần quét lại và tôi có thể kết nối với thiết bị BLE chỉ bằng cách sử dụng địa chỉ BLE của nó.

Được cho là như thế này hay tôi đã giám sát điều gì đó?

Thanks a lot, Stefan

+0

Có thể [ghép nối và/hoặc liên kết] (https://piratecomm.wordpress.com/2014/01/19/ble-pairing-vs-bonding/) được yêu cầu trước khi kết nối không? – JimmyB

+0

Theo như tôi hiểu BLE, điều này là không cần thiết. Ngoài ra nếu tôi thực hiện quét, tôi không làm gì để ghép nối hoặc liên kết và nó hoạt động. Vấn đề là kết nối trực tiếp với thiết bị mà không cần thực hiện quét BLE. – Stefan

Trả lời

4

Địa chỉ thiết bị chỉ đơn thuần là một định danh duy nhất cho thiết bị bluetooth, nó không chứa các thông tin để kết nối. Quá trình quét là cần thiết để truy xuất thông tin trong tín hiệu phát sóng từ thiết bị bluetooth để kết nối có thể được thực hiện. Sau khi quét xong, thông tin được lưu ở đâu đó trên thiết bị và bị ràng buộc vào địa chỉ thiết bị.

Tôi nghĩ nếu bạn cố truy xuất giá trị cho địa chỉ bluetooth, nó sẽ trả về giá trị null cho đến khi nó được quét một lần.

+0

Bạn có nguồn xác nhận điều này không? – Andy

+1

[Nguồn] (https://developer.bluetooth.org/TechnologyOverview/Pages/Baseband.aspx) Nó không nói điều này đặc biệt và trong khi tôi không có chuyên gia về giao thức bluetooth, khấu trừ của tôi là trong khi địa chỉ thiết bị có thể được sử dụng để xác định thiết bị, nó không chỉ định kênh nào để giao tiếp. Giao thức chỉ định kênh yêu cầu cho các thiết bị phụ và máy chủ để tìm hiểu về nhau và cung cấp thêm hướng dẫn về kết nối. Một khi thông tin đó được lấy ra, sau đó tổng thể có thể lưu thông tin đó và thực hiện một kết nối trực tiếp lần sau khi nó đã có các hướng dẫn. –

+0

Lưu ý rằng điều này cũng đúng đối với các thiết bị BLE không được liên kết. có nghĩa là một khi quá trình quét đã hoàn thành và phát hiện dịch vụ được thực hiện khi Android sẽ lưu trữ các dịch vụ và gọi thiết bị BluetoothDevice = mBluetoothAdapter.getRemoteDevice (địa chỉ); sẽ dẫn đến kết nối trong vòng chưa tới 1 giây. – benchuk

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