4

L2CAP を使用して HID デバイス (マウス) に接続する方法を探しています。これは Android アプリ用です。しかし、接続を受け入れるときにエラーが発生します。リフレクションを使用してソケットを作成しています。しかし、これには何か問題があります。この方法で L2CAP を使用して HID デバイスに接続する Android のサンプル コードを教えてください。

4

1 に答える 1

11

あなたのAndroid デバイスAndroid のバージョンは何ですか? Android 4.2 の場合、私が理解しているように現在 Broadcom を使用しているため、SDP 接続しか作成できません。

Nexus 7 (CyanogenMod ROM 10 を搭載した Android 4.2.2) と Wiimote の間で Bluetooth 接続を行っているときに、同じ問題が発生しています。これは HID デバイスなので、L2CAP を使用する必要があります。Android の最新バージョンでは、この接続を作成できました (市場を見ればわかります)。市場でこれに対応するアプリケーションを検索すると、説明を見ると Android バージョン 4.0 以降のすべてのデバイスがサポートされていないことがわかります。

数分前にこの投稿を見つけました。

これを解決したら教えてください。何か見つけたら連絡します。

編集 #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:3Android 4.2 は L2CAP をサポートしていない(または単に Google によって無効にされている..)というスレッドを見つけたので、このログは私にとって非常に悪いニュースです。

私のデバイスは CyanogenMod 10 でルート化されているため、この機能は新しいリリースで復活する可能性があります。私は願います..

編集 #2:これは、問題の理由を含む C ファイルを指すリンクです: btif_sock.c。このファイルを書き直すことが可能かどうか、または外部 C ライブラリを使用して L2CAP 機能を Android に追加する方法を誰かが知っている場合。簡単な作業ではないのではないかと思います。

于 2013-04-01T16:55:42.103 に答える