У меня есть код, который автоматически соединяется с устройством bluetooth, вызывая createBond(), регистрируя широковещательный приемник для android.bluetooth.device.action.PAIRING_REQUEST, а затем вручную вводит PIN-код для пары.
Это отлично работает со всеми проверенными до сих пор устройствами до Andoid 4.0, но сегодня я пробовал это на своем Nexus 7 с Android 4.2.1 и получил следующую ошибку:
java.lang.noSuchMethodException: android.bluetooth.IBluetooth.createBond
Удалили ли они эту функцию из библиотеки?
UPDATE
То, что на самом деле происходит, - это объект интерфейса IBluetooth, который я использую для вызова createBond, не инициализируется. В следующем коде строка, которая пытается получить IBinder с именем BTBinder, возвращает значение null, когда этот процесс выходит из строя, в результате чего BTInterface будет иметь значение null в конце. Итак, теперь мой вопрос заключается в том, почему на моем Nexus 7 с Android 4.2.1 вызов, чтобы получить связующее, возвращает null, но работает правильно на 5 других устройствах, которые я тестировал?
public static IBluetooth getBluetoothInterface()
{
//Gets a bluetooth interface from private Android system API
IBluetooth BTInterface = null;
try
{
Class<?> ServiceManager = Class.forName("android.os.ServiceManager");
Method getService = ServiceManager.getDeclaredMethod("getService", String.class);
IBinder BTBinder = (IBinder) getService.invoke(null, "bluetooth");
Class<?> IBluetooth = Class.forName("android.bluetooth.IBluetooth");
Class<?>[] IBluetoothClasses = IBluetooth.getDeclaredClasses();
Class<?> IBluetoothClass0 = IBluetoothClasses[0];
Method asInterface = IBluetoothClass0.getDeclaredMethod("asInterface",IBinder.class);
asInterface.setAccessible(true);
BTInterface = (IBluetooth) asInterface.invoke(null, BTBinder);
}
catch (Exception e)
{
return null;
}
return BTInterface;
}