2015-10-24 2 views
2

В настоящее время я тестирую профиль глюкозы BLE. Для того, чтобы получить глюкозные записи, глюкозаместитель BLE должен быть связан первым. После того, как устройство связано, я не получаю это устройство больше в обратном вызове onLeScan при выполнении startLeScan.Android BLE: Как проверить наличие подключенного устройства BLE для подключения

Я, однако, может получить список всех связанных BLE устройств с помощью BluetoothAdapter.getDefaultAdapter().getBondedDevices();

Теперь я хочу, чтобы фильтровать скрепленные устройства для устройств, которые в настоящее время находятся в диапазоне/доступны.

ответ

2

Чтобы проверить, есть ли в наличии/недоступны устройства, которые вам нужно сканировать, это не решение для вас, поскольку вы сказали, что по какой-то причине они не обнаруживаются.

Таким образом, вы можете попытаться подключиться непосредственно к связанному устройству, зная его Адрес или имя.

Set<BluetoothDevice> myBondedDevices = mBluetoothAdapter.getBondedDevices(); 
    String MAC = "your device Adress" 
    for(BluetoothDevice mydevice:myBondedDevices){ 
     Log.i("BondedInfo", MAC + " " + mydevice.getAddress()); 
     if(mydevice.getAddress().equals(MAC)){ 
      mydevice.connectGatt(mycontext,true,mygattcallback); 
      break; 
     } 

    } 

Или самый adequated aproximation (по себе):

  • Реализовать вещательный приемник, который обнаружить связывание и подключение, когда связующий устройство в комплекте:

    BroadcastReceiver myServiceBroadcast = new BroadcastReceiver() { 
    
        @Override 
        public void onReceive(Context context, Intent intent) { 
    final int state=intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,BluetoothDevice.ERROR); 
    
        switch(state){ 
         case BluetoothDevice.BOND_BONDING: 
          Log.i("Bondind Status:"," Bonding..."); 
          break; 
    
         case BluetoothDevice.BOND_BONDED: 
          Log.i("Bondind Status:","Bonded!!"); 
          myBluetoothDevice.connectGatt(mycontext, true, myBluetoothGattCallBack); 
          break; 
    
         case BluetoothDevice.BOND_NONE: 
          Log.i("Bondind Status:","Fail"); 
    
          break; 
        }  
    }; 
    
  • Регистрация его надлежащим образом:

    registerReceiver(myServiceBroadcast,new IntenFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));