L2CAP を使用して HID デバイス (マウス) に接続する方法を探しています。これは Android アプリ用です。しかし、接続を受け入れるときにエラーが発生します。リフレクションを使用してソケットを作成しています。しかし、これには何か問題があります。この方法で L2CAP を使用して HID デバイスに接続する Android のサンプル コードを教えてください。
1 に答える
あなたの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:3
。Android 4.2 は L2CAP をサポートしていない(または単に Google によって無効にされている..)というスレッドを見つけたので、このログは私にとって非常に悪いニュースです。
私のデバイスは CyanogenMod 10 でルート化されているため、この機能は新しいリリースで復活する可能性があります。私は願います..
編集 #2:これは、問題の理由を含む C ファイルを指すリンクです: btif_sock.c。このファイルを書き直すことが可能かどうか、または外部 C ライブラリを使用して L2CAP 機能を Android に追加する方法を誰かが知っている場合。簡単な作業ではないのではないかと思います。