Возможно ли установить соединение через L2CAP через Bluetooth?
У меня есть коллекция наушников Bluetooth, и я хотел иметь возможность подключиться напрямую к их профилю AVRCP.
Основным камнем преткновения является то, что не существует общедоступного способа создания сокета L2CAP. Теоретически приведенный ниже код должен работать, но я получаю сообщение об ошибке отказа в разрешении.
У меня есть это в моем манифесте:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Фрагмент кода здесь:
private BluetoothSocket createL2CAP(BluetoothDevice bd, UUID uuid) {
BluetoothSocket result = null;
try {
c=BluetoothSocket.class.getDeclaredConstructor(int.class,int.class,boolean.class,boolean.class, BluetoothDevice.class,int.class,ParcelUuid.class);
result=(BluetoothSocket) c.newInstance(BluetoothSocket.TYPE_L2CAP, -1, true, true, bd, -1, new ParcelUuid(uuid));
} catch (NoSuchMethodException e) {
addln("BluetoothSocket: No Such Constructor");
} catch (IllegalAccessException e) {
addln("BluetoothSocket: Illegal access");
} catch (InvocationTargetException e) {
addln("BluetoothSocket: Target exception "+e.getMessage());
} catch (InstantiationException e) {
addln("BluetoothSocket: "+e.getMessage());
}
return result;
}
Он находит конструктор, но выбрасывает исключение IllegalAccessException. Кому-нибудь посчастливилось убедить Android Bluetooth установить любой тип соединения, кроме RFCOMM? И / или есть ли другой подход, который может иметь больший успех?
(PS: addln просто отправляет сообщения в текстовое представление, чтобы я мог видеть, что происходит)