Je peux coupler un clavier Bluetooth mais je n'arrive pas à me connecter pour en faire un périphérique d'entrée. Je suis passé par la documentation fournie sur le site des développeurs - http://developer.android.com/guide/topics/connectivity/bluetooth.html#ProfilesComment connecter et connecter par programme un périphérique Bluetooth HID (clavier Bluetooth) sur Android
Il dit que l'API Android Bluetooth fournit des implémentations pour les profils Bluetooth suivants mais vous pouvez implémenter l'interface BluetoothProfile pour écrire vos propres classes pour soutenir un profil Bluetooth particulier.
- Casque
- A2DP
- Appareil de santé
Il n'y a pas de documentation comment implémenter BluetoothProfile pour périphérique Bluetooth HID (clavier)
Android lui-même a mis en place une connexion Bluetooth pour les périphériques HID mais ces API sont cachés. J'ai essayé la réflexion pour les utiliser aussi. Je ne reçois aucune erreur mais le clavier ne se connecte pas en tant que périphérique d'entrée. C'est ce que je l'ai fait -
private void connect(final BluetoothDevice bluetoothDevice) {
if(bluetoothDevice.getBluetoothClass().getDeviceClass() == 1344){
final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
Log.i("btclass", profile + "");
if (profile == getInputDeviceHiddenConstant()) {
Class instance = null;
try {
//instance = Class.forName("android.bluetooth.IBluetoothInputDevice");
instance = Class.forName("android.bluetooth.BluetoothInputDevice");
Method connect = instance.getDeclaredMethod("connect", BluetoothDevice.class);
Object value = connect.invoke(proxy, bluetoothDevice);
Log.e("btclass", value.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
@Override
public void onServiceDisconnected(int profile) {
}
};
mBluetoothAdapter.getProfileProxy(this, mProfileListener,getInputDeviceHiddenConstant());
}
}
public static int getInputDeviceHiddenConstant() {
Class<BluetoothProfile> clazz = BluetoothProfile.class;
for (Field f : clazz.getFields()) {
int mod = f.getModifiers();
if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && Modifier.isFinal(mod)) {
try {
if (f.getName().equals("INPUT_DEVICE")) {
return f.getInt(null);
}
} catch (Exception e) {
Log.e("", e.toString(), e);
}
}
}
return -1;
}
Avez-vous réussi à obtenir une connexion HID fonctionnant? Je suis bloqué avec le problème que la nouvelle version Android n'a pas le profil Bluetooth HID. Quelle version Android avez-vous utilisée? – DutchKevv
@DutchKev - Je l'ai essayé sur Android 4.4.2 et comme je l'ai répondu ci-dessous, vous ne pouvez pas le connecter par programmation. Aussi, je ne suis pas au courant des nouvelles versions Android, qu'ils fournissent ou non le profil HID bluetooth. – Passiondroid
Merci ou répondre. voir le code ci-dessous .. J'ai continué à travailler sur le même problème la nuit dernière, et a obtenu quelques étapes plus loin .. Quand je me connecte pour la première fois 'manuellement' par le biais du gestionnaire de connexion Android normal .. Je peux alors, avec réflexion, créer un L2CAP prise bluetooth – DutchKevv