8

Nexus 4 を Wii バランス ボードに接続しようとしていますが、次のエラーが表示されます。

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

したがって、接続は完了しません。

私のソケット:

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

エラーが表示される場所:

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

ソケットを 1 つ開いただけなので、このリンクを確認しましたが成功しませんでした: bluetoothmanagercallback なしで呼び出された getbluetoothservice()

探索するためのヘルプやアイデアはありますか?

4

1 に答える 1

1

getDefaultAdapter()ソケット オブジェクトを作成する前にBluetoothAdapter を取得してみてください。上記の呼び出しで BLuetoothAdater への参照が取られると、コールバック サービスが作成されるようです。詳細: https ://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothAdapter.java

whereが呼び出されたmService = managerService.registerAdapter(mManagerCallback);ときに値がロードされます 。getDefaultAdapter

ソケット connect() の場合、getBluetoothService() 引数は常に null です。以下のコードを参照してください。

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

ps GoogleはBluetoothSocketコンストラクターの使用を直接宣伝しておらず、BluetoothDeviceのメソッドを使用してソケットを作成するように求めていないようです.(Googleサイトの参照から)背後にある理由は私にはわかりません.

于 2013-06-25T22:00:58.827 に答える