2013-06-25 22 views
6

Tôi đang cố gắng để kết nối Nexus 4 với một Wii Balance Board nhưng tôi nhận được lỗi này:Android: getBluetoothService() gọi mà không có BluetoothManagerCallback

getBluetoothService() called with no BluetoothManagerCallback 
connect(), SocketState: INIT, mPfd: null 

Vì vậy, nó không hoàn thành kết nối.

ổ cắm của tôi:

public final class wSocket 
{ 
    public static BluetoothSocket create(BluetoothDevice dev, int port) 
    { 
     try { 
     /* 
     * BluetoothSocket(int type, int fd, boolean auth, boolean encrypt, BluetoothDevice device, int port, ParcelUuid uuid) 
     */ 
      Constructor<BluetoothSocket> construct = BluetoothSocket.class.getDeclaredConstructor(int.class, int.class, boolean.class, 
       boolean.class, BluetoothDevice.class, int.class, ParcelUuid.class); 

      construct.setAccessible(true); 
      return construct.newInstance(3 /* TYPE_L2CAP */, -1, false, false, dev, port, null); 
     } catch (Exception ex) { 
      return null; 
     } 
    } 
} 

đâu nó mang lại cho tôi những lỗi:

private BluetoothSocket sk; 
... 
sk = wSocket.create(wm.dev, 0x11); 
... 
sk.connect(); 

Tôi đã kiểm tra liên kết này không thành công vì tôi chỉ cần mở 1 ổ cắm: getbluetoothservice() called with no bluetoothmanagercallback

Bất kỳ giúp đỡ hoặc ý tưởng để khám phá?

+0

Bạn đang sử dụng phiên bản Android nào? Tôi cũng nhận được lỗi này ngay lập tức, nhưng chưa bao giờ có nó trước đây. –

+0

Tôi vừa mới bắt đầu thấy lỗi này trên Android 4.4. Tôi đã thực hiện rất nhiều công việc với Bluetooth trên nhiều loại thiết bị, mặc dù chủ yếu là 2.x và 3.x. –

Trả lời

1

Thử tải BluetoothAdapter qua getDefaultAdapter() trước khi tạo đối tượng ổ cắm. Có vẻ như dịch vụ gọi lại được tạo khi tham chiếu đến BLuetoothAdater được thực hiện bằng cuộc gọi được đề cập ở trên. Để biết chi tiết: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothAdapter.java

trong đó mService = managerService.registerAdapter(mManagerCallback); được nạp với giá trị khi getDefaultAdapter được gọi.

cho ổ cắm connect() lập luận getBluetoothService() luôn luôn là null, xem mã bên dưới:

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothSocket.java

tái bút: có vẻ như google không quảng cáo việc sử dụng phương thức khởi tạo BluetoothSocket trực tiếp và yêu cầu sử dụng phương thức của BluetoothDevice để tạo ổ cắm. (từ tài liệu tham khảo trên trang web google) lý do đằng sau không được tôi biết đến.

+0

Tôi quên nói rằng tôi gọi "_adapter = BluetoothAdapter.getDefaultAdapter();" trước khi tạo đối tượng socket. – omniyo

+0

bạn đã thử tạo ổ cắm bằng BluetoothDevice hoặc bạn muốn đạt được kiểm soát tốt hơn (cổng kênh vv) thông qua hàm tạo BluetoothSocket tiềm ẩn? Và bạn đã thử nghiệm mã nào đối với các bản sửa đổi sản phẩm Android? –

+0

@omniyo bạn có thể giải quyết vấn đề này không? – momo

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