2017-04-21 23 views
0

私は現在、リストバンドからデータを取得し、それらを処理して健康評価のようなものを得ることを目指すアンドロイドアプリを開発中のプロジェクトに入っています。android bleはonCharacteristicRead()を呼び出せません

private BluetoothGattCallback gattcallback = new BluetoothGattCallback() { 
    @Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, final int newState) { 
     super.onConnectionStateChange(gatt, status, newState); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       String status; 
       switch (newState) { 
        case BluetoothGatt.STATE_CONNECTED: 
         lianjiezhuangtai.setText("connection succeed"); 
         bluetoothAdapter.stopLeScan(callback); 
         bluetoothGatt.discoverServices(); 
         break; 
        case BluetoothGatt.STATE_CONNECTING: 
         lianjiezhuangtai.setText("trying to connect"); 
         break; 
        case BluetoothGatt.STATE_DISCONNECTED: 
         lianjiezhuangtai.setText("connection lost"); 
         break; 
        case BluetoothGatt.STATE_DISCONNECTING: 
         lianjiezhuangtai.setText("disconnecting"); 
         break; 
       } 
       //pd.dismiss(); 
      } 
     }); 
    } 

    @Override 
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 
     jibu.setText("run: trying to get steps"); 
     super.onCharacteristicRead(gatt, characteristic, status); 

     if (status == bluetoothGatt.GATT_SUCCESS) { 
      final int sum = 100;//characteristic.getValue()[0]; 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        jibu.setText("walked" + sum + "steps"); 
       } 
      }); 

      Log.e(TAG, "onCharacteristicRead: " + characteristic.getValue()[0]); 

     } 

    }   
    @Override 
    public void onServicesDiscovered(final BluetoothGatt gatt,final int status) { 
     super.onServicesDiscovered(gatt, status); 
     Log.i(TAG, "run: trying to get steps"); 
     if (status == bluetoothGatt.GATT_SUCCESS) { 
      final List<BluetoothGattService> services = bluetoothGatt.getServices(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        //List<String> serlist = new ArrayList<>(); 
        for (final BluetoothGattService bluetoothGattService : services) { 
         bluetoothGattServices = bluetoothGattService; 

         Log.i(TAG, "onServicesDiscovered: " + bluetoothGattService.getUuid()); 

         List<BluetoothGattCharacteristic> charc = bluetoothGattService.getCharacteristics(); 

         for (BluetoothGattCharacteristic charac : charc) { 
          Log.i(TAG, "run: " + charac.getUuid()); 
          // 00002a06-0000-1000-8000-00805f9b34fb 
        //  bluetoothGatt.setCharacteristicNotification(characteristic_zd,true); 
          if (charac.getUuid().toString().equals("0000ff06-0000-1000-8000-00805f9b34fb")) { 
           characteristic_zd = charac; 

          } else if (charac.getUuid().toString().equals("00002a06-0000-1000-8000-00805f9b34fb")) { 

           characteristic_jb = charac; 

           // bluetoothGatt.setCharacteristicNotification(characteristic_jb,true); 
           bluetoothGatt.readCharacteristic(characteristic_jb); 
           //sum = charac.getValue()[0]; 
           gattcallback.onCharacteristicRead(gatt, characteristic_jb, status); 
           Log.i(TAG, "run: trying to get steps"); 
          } else if (charac.getUuid().toString().equals("")) { 
          } 
         } 


         serviceslist.add(bluetoothGattService.getUuid().toString()); 

        } 
//      ArrayAdapter<String> adapter = new ArrayAdapter<String>(
//        MainActivity.this, android.R.layout.simple_expandable_list_item_1, serviceslist); 
        //list.setAdapter(adapter); 
       } 
      }); 
     } 

    } 



    @Override 
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 
     super.onCharacteristicWrite(gatt, characteristic, status); 
    } 


    @Override 
    public void onCharacteristicChanged(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic) { 
     super.onCharacteristicChanged(gatt, characteristic); 



    } 

}; 
:そして、私はそれだけで呼び出さないでしょう...ここで

がこの部分に対してコードです...私は仕事にonCharacteristicRead()関数を取得することはできません。この問題にこだわっています

だから誰も私にこの問題を助けることができますか?しばらくの間、解決策を探して、まだこの問題を解決することはできません...どうもありがとう

答えて

0

3つのこと:

  1. をあなたは、各コールバックでsuper.method()を呼び出す必要はありません。
  2. あなたはonCharacteristicReadを自分で呼び出すべきではありません。あなたがreadCharacteristicメソッドを呼び出した後、読み込み応答が取得されると、Bluetoothスタックはそれを行います。
  3. 複数の特性がある場合、AndroidのGATT APIは一度に1つの未処理操作しか持つことができないため、コードは機能しません。つまり、別のreadCharacteristicを実行する前にonCharacteristicReadコールバックを待つ必要があります。 (readCharacteristicの戻り値を出力すると、最初にtrueを出力しますが、次の時間はfalseになることがわかります)
関連する問題