2014-11-19 22 views
8

Tôi đang phát triển trong Android và BLE. Tôi muốn ứng dụng tự động kết nối lại với thiết bị BẬT BLE sau khi thiết bị BLE ngắt kết nối nhưng trở lại phạm vi và quảng cáo.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?

tôi sử dụng đoạn mã sau để kết nối với các thiết bị BLE:

public void connect(final String address) { 
     // TODO Auto-generated method stub 
     Log.w(TAG, "BluetoothLeService Connect function."); 
     if(mBluetoothAdapter == null || address == null){ 
      Log.w(TAG, "BluetoothAdapter not initialized or unspecified address."); 
      //return false; 
     } 

     final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 
     mBluetoothGatt = device.connectGatt(this, true, mGattCallback); 

    } 

tôi đã thiết lập các AutoConnect đến true, nhưng nó không kết nối lại khi thiết bị BLE đã ngắt kết nối và trở lại trong phạm vi .

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?

Tôi có thiếu gì đó không?

Xin cảm ơn trước.

Trả lời

12

Tham số tự động kết nối xác định xem có chủ động kết nối với thiết bị từ xa (hoặc) thay vì thụ động quét và hoàn tất kết nối khi thiết bị từ xa nằm trong phạm vi phủ sóng hay không.

Nhưng điều này không có nghĩa là thiết bị ngoại vi bị ngắt kết nối trong nhiều ngày sau đó xuất hiện lại sẽ được kết nối lại.

Thông thường, kết nối đầu tiên đến một thiết bị phải trực tiếp (kết nối tự động được đặt thành false) và kết nối tiếp theo với thiết bị đã biết sẽ được gọi với tham số autoConnect được đặt thành true.

Cũng xin lưu ý, kết nối tự động sẽ chỉ hoạt động khi thiết bị vẫn đang phát sóng. Nếu không, thì nó sẽ không hoạt động.

Tôi muốn bạn kết nối lại thủ công hơn khi thiết bị bị ngắt kết nối. Nếu trong trường hợp bạn kết thúc sau này, bạn sẽ cần một điểm đánh dấu để xác định xem thiết bị đã thực sự bị ngắt kết nối mà không có sự đồng ý của người dùng.

Nếu đúng thì hãy hủy liên kết/hủy đăng ký bộ thu dịch vụ/phát sóng của bạn và kết nối lại bằng cách sử dụng địa chỉ thiết bị mà bạn phải lưu trước đó.

+0

Giới hạn thời gian BLE kết nối lại sau khi ngắt kết nối thiết bị khi autoConnect được đặt thành true trong Android? – Wun

+2

i am không chắc chắn phải trung thực, vì tôi không bao giờ tìm thấy tính năng tự động kết nối để hoàn toàn đáng tin cậy (ít nhất là trong trường hợp của tôi) và như tôi đã đề cập trước khi tôi viết mã của riêng mình để kết nối lại với BLE. đáng tin cậy. –

+0

Tôi hiểu. Cảm ơn bạn đã giúp đỡ! – Wun

-1

Theo thử nghiệm của tôi với các thiết bị BLE, nó có hành vi khác nhau trong các bản dựng khác nhau như Kitkat và Lollipop. Thậm chí tôi đã quan sát, bằng cách sử dụng ScanCallback không phải là quá đáng tin cậy được giới thiệu ở cấp độ API 24.

Để tự động kết nối với thiết bị BLE phải hoạt động.

Đối với tôi tôi đã phải hỗ trợ kitkat và kẹo mút như vậy trong khi kết nối GATT tôi gọi là:

if(Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { 
      gatt = device.connectGatt(this, true, executor); 
     } else { 
      gatt = device.connectGatt(this, false, executor); 
     } 

Bây giờ tự động kết nối đang làm việc cho tôi trong cả hai Lollipop và Kitkat.

+0

Vâng, bây giờ bạn chỉ cần tắt tự động kết nối cho non-kitkat? Điều đó có nghĩa là bạn sẽ sử dụng kết nối trực tiếp với các tác động của nó trong thời gian chờ 30 giây và tối đa 1 kết nối đang chờ xử lý tại một thời điểm. – Emil

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