2013-02-07 51 views
3

我正在寻找一种方法来使用L2CAP连接到HID设备(鼠标),这是一个Android应用程序。但我在接受连接时出错。我正在使用反射来创建套接字。但有些事情是错的。 可以有人请直接给我一个Android的示例代码,这种方式使用L2CAP连接到HID设备,但没有生根。使用L2CAP连接到蓝牙HID设备(鼠标)

+0

如果我的回答对你有帮助,你能接受吗?问候。 –

回答

10

什么是您的Android设备Android版本? 如果它是Android 4.2,那么他们现在就按照我的理解使用了Broadcom,因此我们只能创建SDP连接。

我在Nexus 7(Android 4.2.2与CyanogenMod ROM 10)和Wiimote之间建立蓝牙连接时遇到同样的问题。这是一个HID设备,所以我需要使用L2CAP。 Android的最新版本能够创建此连接(我们可以通过查看市场来找出)。如果您搜索应用程序以在市场上处理此问题,您会看到所有安装有Android 4.0以上版本的设备不受支持的说明。

我刚刚发现这个帖子几分钟前,这可以帮助你:stackoverflow.com/a/7838587/1772805

让你解决这个我知道。如果我发现任何东西,我会保持联系。

编辑#1:我试过上面的链接解决方案。我改变了它使用不同的构造是这样的:

private static final int TYPE_RFCOMM = 1; 
private static final int TYPE_SCO = 2; 
private static final int TYPE_L2CAP = 3; 

/** 
* Create a BluetoothSocket using L2CAP protocol 
* Useful for HID Bluetooth devices 
* @param BluetoothDevice 
* @return BluetoothSocket 
*/ 
private static BluetoothSocket createL2CAPBluetoothSocket(BluetoothDevice device){ 
    int type  = TYPE_L2CAP; // L2CAP protocol 
    int fd   = -1;   // Create a new socket 
    boolean auth = false;  // No authentication 
    boolean encrypt = false;  // Not encrypted 
    int port  = 0;   // port to use (useless if UUID is given) 
    ParcelUuid uuid = new ParcelUuid(wiimoteUuid); // Bluetooth UUID service 

    try { 
    Constructor<BluetoothSocket> constructor = BluetoothSocket.class.getDeclaredConstructor(
     int.class, int.class, boolean.class, boolean.class, 
     BluetoothDevice.class, int.class, ParcelUuid.class); 
    constructor.setAccessible(true); 
    BluetoothSocket clientSocket = (BluetoothSocket) constructor.newInstance(
     type, fd, auth, encrypt, device, port, uuid); 
    return clientSocket; 
    } catch (Exception e) { 
    e.printStackTrace(); 
    return null; 
    } 
} 

我成功创建插座,但是当我调用该方法connect(),我得到这个错误:bt l2cap socket type not supported, type:3。这个日志对我来说是一个非常糟糕的新东西,因为我发现这个thread其中说Android 4.2不支持L2CAP(或者只是被Google禁用..)。

因为我的设备植根于CyanogenMod 10,该功能可能会在新版本中恢复。我希望...

编辑#2:这是一个指向包含问题原因的C文件的链接:btif_sock.c。如果有人知道是否可以重新编写这个文件,或者如何使用外部C库将L2CAP功能添加到Android。恐怕这不是一个简单的任务。

+0

这还有什么运气吗?我反映了Socket构造函数,但是当我socket.connect() – DutchKevv

+0

我总是得到'无法连接,ret -1'错误我不知道这个问题的当前状态。我不再工作了。我建议你创建一个新的主题,并在你的文章中给出这个答案的链接。 –

+0

啊好吧,谢谢你的提升..我贴了一些代码,如果它可以帮助下一个失去的开发者:) – DutchKevv