2013-06-25 11 views
6

Próbuję podłączyć Nexus 4 z Wii Balance Board, ale pojawia się ten błąd:Android: getBluetoothService() wywołana bez BluetoothManagerCallback

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

Więc to nie kończy połączenie.

Moje gniazdo:

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; 
     } 
    } 
} 

Gdzie to daje mi błąd:

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

Sprawdziłem link, bez powodzenia, bo po prostu otwarty 1 gniazdo: getbluetoothservice() called with no bluetoothmanagercallback

Wszelkie pomoc czy pomysł do odkrycia?

+0

Jakiej wersji Androida używasz? Natychmiast otrzymuję ten błąd, ale nigdy go nie miałem. –

+0

Właśnie zacząłem widzieć ten błąd na Androidzie 4.4. Zrobiłem dużo pracy z Bluetooth na wielu różnych urządzeniach, ale głównie 2.x i 3.x. –

Odpowiedz

1

Spróbuj uzyskać BluetoothAdapter przez getDefaultAdapter() przed utworzeniem obiektu gniazda. Wygląda na to, że usługa wywołania zwrotnego jest tworzona, gdy odwołanie do BLuetoothAdater jest podejmowane przez wyżej wymienione wywołanie. Aby uzyskać szczegółowe informacje: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothAdapter.java

gdzie mService = managerService.registerAdapter(mManagerCallback); jest ładowany z wartością, gdy wywoływana jest getDefaultAdapter.

do gniazda połączenia() proces getBluetoothService() argument jest zawsze zerowa, patrz kod poniżej

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

P.S. wygląda na to, że google nie reklamuje bezpośrednio użycia konstruktora BluetoothSocket i prosi o użycie metody BluetoothDevice do utworzenia gniazda. (z referencji na stronie google) nie wiadomo mi, dlaczego tak się dzieje.

+0

Zapomniałem powiedzieć, że nazywam "_adapter = BluetoothAdapter.getDefaultAdapter();" przed utworzeniem obiektu gniazda. – omniyo

+0

czy próbowałeś utworzyć gniazdo za pomocą BluetoothDevice lub chcesz osiągnąć lepszą kontrolę (port itp.) Za pośrednictwem niejawnego konstruktora BluetoothSocket? A na jakich wersjach produktów z Androidem testowałeś swój kod? –

+0

@omniyo byłeś w stanie rozwiązać problem? – momo

Powiązane problemy