2

我基于Fitscales 代码制作了一个 Android 应用程序,可以很好地连接和读取 Wii 平衡板的输入。在 Android 4.4 (KitKat) 之前,我的应用程序在 SDK 15 和 16 上的工作就像一个魅力,当时 Android 停止了对 Wii 的支持。Wii 支持现在重新启用,从Android 5.1.1开始。我还实现了获取蓝牙连接权限的新权限方案(包括 ACCESS_COARSE_LOCATION)

我的问题是我无法再读取 Wii 平衡板输入。

我可以发现、创建套接字并在连接到套接字时收到消息:read failed, socket might closed or timeout, read ret: -1

到目前为止对我有帮助但不再工作的答案:

创建wiimote套接字

如何连接

一些代码:

private BluetoothSocket createBluetoothSocket(
        int type, int fd, boolean auth, boolean encrypt, String address, int port){
    try {
        Constructor<BluetoothSocket> constructor = BluetoothSocket.class.getDeclaredConstructor(
                int.class, int.class,boolean.class,boolean.class,String.class, int.class);
        constructor.setAccessible(true);
        BluetoothSocket clientSocket = constructor.newInstance(type,fd,auth,encrypt,address,port);
        return clientSocket;
    } catch (Exception e) {
        Log.v(TAG,"createBluetoothSocket failed: "+errorMsg(e));
        return null;
    }
}   


private connectWii(String MAC) {
    try {
        // MAC is the MAC address of Wiiboard
        int TYPE_L2CAP=3;
        sk = createBluetoothSocket(TYPE_L2CAP, -1, false,false, MAC, 0x13);
        // this fires read failed, socket might closed or timeout, read ret: -1
        sk.connect();
    } catch (Exception e) {
        Log.v(TAG,"Failed : "+errorMsg(e));
    }
}

提前感谢您的帮助。

4

1 回答 1

3

值得看看这个问题的回答 - https://android.stackexchange.com/a/105285

似乎 Android 4.1 及更低版本提供了对 L2CAP 协议的访问,以连接到已从最新版本的 Android 中删除的蓝牙经典设备(大约 2005 年或更早)。

于 2017-08-29T21:41:18.597 回答