Sono in grado di accoppiare una tastiera Bluetooth ma non riesco a connettermi in modo da renderlo un dispositivo di input. Sono andato attraverso la documentazione fornita al sito degli sviluppatori - http://developer.android.com/guide/topics/connectivity/bluetooth.html#ProfilesCome associare e connettere a livello di codice un dispositivo bluetooth HID (tastiera Bluetooth) su Android
Si dice che l'API Bluetooth Android fornisce implementazioni per i seguenti profili Bluetooth, ma è possibile implementare l'interfaccia BluetoothProfile di scrivere le proprie classi per supportare un particolare profilo Bluetooth.
- auricolare
- A2DP
- dispositivo di salute
Non v'è alcuna documentazione come implementare BluetoothProfile per il dispositivo Bluetooth HID (tastiera)
Android ha messo in atto in sé di connessione Bluetooth per dispositivi HID ma quelle API sono nascoste. Ho provato a riflettere anche per usarli. Non ricevo alcun errore, ma la tastiera non viene collegata come dispositivo di input. Questo è quello che ho fatto -
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;
}
Sei riuscito a far funzionare una connessione HID? Sono bloccato con il problema che la versione Android più recente non ha il profilo HID bluetooth. Quale versione di Android hai usato? – DutchKevv
@DutchKev - L'ho provato su Android 4.4.2 e come ho risposto di seguito non è possibile collegarlo programmaticamente. Inoltre non sono a conoscenza delle versioni Android più recenti se forniscono profilo HID bluetooth o meno. – Passiondroid
Grazie o risposta. guarda il codice qui sotto .. Ho continuato a lavorare sullo stesso problema la scorsa notte, e ho fatto qualche passo in più .. Quando mi collego 'manualmente' tramite il normale gestore di connessione bluetooth Android .. Posso quindi, con la riflessione, creare un L2CAP presa bluetooth – DutchKevv