Ответ mringwal является правильным, кроме подхода NDK, можно использовать отражение на некоторых устройствах для достижения подключения L2CAP:
public static BluetoothSocket createL2CAPBluetoothSocket(String address, int psm){
return createBluetoothSocket(TYPE_L2CAP, -1, false,false, address, psm);
}
// method for creating a bluetooth client socket
private static 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 = (BluetoothSocket)
constructor.newInstance(type,fd,auth,encrypt,address,port);
return clientSocket;
}catch (Exception e) { return null; }
}
, где TYPE_L2CAP - целое число, имеющее постоянное значение 3.
Обратите внимание, что этот подход будет работать только на НЕКОТОРЫХ устройствах Android.
Написание HID-приложения - непростая задача.Вам необходимо реализовать синтаксический анализатор дескриптора отчета, компонент, используемый для «обнаружения» возможностей (специальных ключей, функций) удаленного устройства HID.Вам также нужно будет изучить протокол HID и рабочий процесс, копию можно найти здесь: http://www.dawidurbanski.pl/public/download/projekty/bluepad/HID_SPEC_V10.pdf
Уже есть профессиональные программы, которые делают именно это, поддерживая HID на Android, см., Например, это программное обеспечение: http://teksoftco.com/index.php?section=product&pid=24
Из-за ограничений стека протокол L2CAP доступен не на всех устройствах, поэтому решение, которое работает на ВСЕХ устройствах, в настоящее время невозможно.