8 votes

Android : getBluetoothService() appelé sans BluetoothManagerCallback

J'essaie de connecter mon Nexus 4 avec une Wii Balance Board mais j'obtiens cette erreur :

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

Donc ça ne termine pas la connexion.

Ma prise :

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

Où il me donne l'erreur :

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

J'ai vérifié ce lien sans succès car je n'ai ouvert qu'une seule prise : getbluetoothservice() appelé sans bluetoothmanagercallback

Une aide ou une idée à explorer ?

1voto

Asaf Sh. Points 49

Essayez d'obtenir BluetoothAdapter via getDefaultAdapter() avant la création de l'objet socket. Il semble que le service de callback soit créé lorsque la référence à BLuetoothAdater est prise par l'appel mentionné ci-dessus. Pour plus de détails : https://Android.googlesource.com/platform/frameworks/base/+/master/core/java/Android/bluetooth/BluetoothAdapter.java

mService = managerService.registerAdapter(mManagerCallback); est chargé de valeur lorsque getDefaultAdapter s'appelle.

pour le socket connect() l'argument getBluetoothService() est toujours nul, voir le code ci-dessous :

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

p.s. il semble que google n'annonce pas l'utilisation du constructeur de BluetoothSocket directement et demande d'utiliser la méthode de BluetoothDevice pour obtenir le socket créé.(de la référence sur le site de google) la raison derrière n'est pas connue pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X