首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用L2CAP连接到蓝牙HID设备(鼠标)

使用L2CAP连接到蓝牙HID设备(鼠标)
EN

Stack Overflow用户
提问于 2013-02-07 21:44:32
回答 1查看 12.5K关注 0票数 4

我想找到一种方法,用L2CAP连接到HID (鼠标),这是一个安卓应用程序。但我在接受连接时出错了。我使用反射来创建套接字。但这是有问题的。有人能告诉我一个例子代码的安卓,连接到一个HID设备使用L2CAP的方式,但不生根。

EN

回答 1

Stack Overflow用户

发布于 2013-04-01 16:55:42

你的安卓设备安卓版本是什么?如果是Android4.2,他们现在使用的是Broadcom,所以我们只能创建SDP连接。

在我的Nexus 7(带有CyanogenMod ROM 10的Android4.2.2)和Wiimote之间建立蓝牙连接时,我也遇到了同样的问题。这是一个HID设备,所以我需要使用L2CAP。Android的最后一个版本能够创建这种连接(我们可以通过市场来了解)。如果您在市场上搜索一个应用程序来处理这个问题,那么通过查看所有使用Android 4.0+的设备都不受支持的描述,您将看到这一点。

我几分钟前才找到这篇文章,它可以帮你:stackoverflow.com.com/a/7838587/1772805

如果你解决了就告诉我。如果我发现什么我会和你保持联系的。

编辑#1:我在上面的链接上尝试了这个解决方案。我将其更改为使用如下不同的构造函数:

代码语言:javascript
复制
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。这个日志对我来说是一个非常糟糕的新发现,因为我发现了这个线程,它说Android4.2不支持L2CAP (或者只是被谷歌禁用了)。

因为我的设备是以CyanogenMod 10为基础的,这个特性可能会在一个新的版本上重新出现。我希望.。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14761570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档