Intereting Posts
Как хранить и извлекать изображения в базе данных Androidite SQL и отображать их на gridview Как использовать оболочку ADB при подключении нескольких устройств? Ошибка с «ошибкой: более одного устройства и эмулятора» Как определить, сколько текста будет вписываться в TextView в Android? Как включить LogCat / Console в Eclipse для Android? Android настроил гравитацию для TextView программно Почему Android-загрузчик классов допускает отражающий доступ к публичному полю пакета-частного класса из другого пакета? Пользовательский TaskStack завершает родительскую активность из уведомления Доступ к настройкам Android NotificationListenerService Каков самый простой способ сделать Image touchable в libgdx? Можно ли программно определить режим связи USB? Gradle: Выполнение не выполнено для задачи ': processDebugManifest' Странная проблема с памятью при загрузке изображения в объект Bitmap MediaPlayer в отдельном потоке с помощью службы или IntentService InstantiateItem в PagerAdapter и AddView в замешательстве ViewPager Android-разрешение на создание базы данных

Android.bluetooth.IBluetooth.createBond () не найден в 4.2.1, но работает в более ранних версиях ОС

У меня есть код, который автоматически соединяется с устройством 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

Удалили ли они эту функцию из библиотеки?

ОБНОВИТЬ

На самом деле происходит то, что объект интерфейса 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; } 

Solutions Collecting From Web of "Android.bluetooth.IBluetooth.createBond () не найден в 4.2.1, но работает в более ранних версиях ОС"

В Android 4.2 они изменили реализацию пакета bluetooth.

«Android 4.2 представляет новый стек Bluetooth, оптимизированный для использования с устройствами Android. Новый стек Bluetooth, разработанный в сотрудничестве между Google и Broadcom, заменяет стек на основе BlueZ и обеспечивает улучшенную совместимость и надежность».

Есть много связанных с Bt вещей, которые не работают даже с публичной api на Nexus 7.

  public boolean createBond(BluetoothDevice btDevice) throws Exception { Class class1 = Class.forName("android.bluetooth.BluetoothDevice"); Method createBondMethod = class1.getMethod("createBond"); Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); return returnValue.booleanValue(); } 

Это работало над 4.2.1 Galaxy Nexus. Не пробовал на Nexus 7, но у меня была такая же проблема метода MethodNotFoundException, когда я использую метод IBluetooth. Таким образом, это может также исправить и для Nexus 7.