Invocar um método privado (não publicado) na API do Android
Preciso verificar quais fones de ouvido BT estão conectados no momento (e não apenas emparelhados) no OS 2.0 - 2.3. Essa funcionalidade não existe até a API versão 11, onde uma classe de fone de ouvido Bluetooth foi introduzida. Mas já existia uma classe chamada BluetoothHeadset em APIs anteriores, mas não era acessível ao público. Aqui está a documentação para isso:http: //www.kiwidoc.com/java/l/x/android/android/9/p/android.bluetooth/c/BluetoothHeadse. Então, eu estava tentando usar a reflexão para invocar o método "isConnected", mas sou horrível com a reflexão e estou recebendo um errojava.lang.IllegalArgumentException: object is not an instance of the class
.
Eu tenho uma lista de dispositivos emparelhados usandoBluetoothDevice.getBondedDevices()
e tento usar oisConnected()
método em cada um. Aqui está o código:
public boolean isBtDevConnected(BluetoothDevice btDev){
boolean connected = false;
try {
Class<?> BTHeadset = Class.forName("android.bluetooth.BluetoothHeadset");
Method isConnected = BTHeadset.getMethod("isConnected", new Class[] {BluetoothDevice.class});
connected = isConnected.invoke(BTHeadset, new Object[] {btDev});
}
}
} catch (Exception e) {
WriteToLog(e);
}
return connected;
}
Recebo a exceção na linha que chama o método, mas não tenho certeza do que estou fazendo de errad