2013-08-16 32 views
0

我有一個CC2540 BLE工具包,我想在智能手機應用程序中查看該工具包的電池電量。我製作了代碼,可以從套件中獲取電池電量。在這種情況下,電池電量稱爲BodySensor:從TI CC2540藍牙低功耗工具包接收數據

首先,我將介紹該套件的電池維修部件的特性值。所以我使用的服務和特色UUID對電池服務:

public void getBodySensorLoc(BluetoothDevice device) 
{ 
    Log.i(TAG, "getBodySensorLoc"); 
    BluetoothGattService mHRP = mBluetoothGatt.getService(device, HRP_SERVICE); 
    if (mHRP == null) 
    { 
     Log.e(TAG, "getBodySensorLoc: mHRP = null"); 

     return; 
    } 
    BluetoothGattCharacteristic mBSLcharac = mHRP.getCharacteristic(BODY_SENSOR_LOCATION); 
    if (mBSLcharac == null) { 
     Log.e(TAG, "getBodySensorLoc: mBSLcharac = null"); 
     return; 
    } 
    mBluetoothGatt.readCharacteristic(mBSLcharac); 
} 

我的目的是讀取電池電量,在我的應用程序按下按鈕時。所以我在我的Activity類中實現這個按鈕:

((Button) findViewById(R.id.btn_BSL)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      mService.getBodySensorLoc(mDevice); 
     } 
    }); 

該套件會自動將電池電量發送回智能手機。所以,我將專注於BluetoothGattCallback部分onCharacteristicRead方法在我的代碼:

private BluetoothGattCallback mGattCallbacks = new BluetoothGattCallback() 
{ 

    public void onCharacteristicRead(BluetoothGattCharacteristic charac, int status) 
    { 
     UUID charUuid = charac.getUuid(); 
     Bundle mBundle = new Bundle(); 
     Message msg = Message.obtain(mActivityHandler, HRP_VALUE_MSG); 
     Log.i(TAG, "onCharacteristicRead"); 
     if (charUuid.equals(BODY_SENSOR_LOCATION)) 
      mBundle.putByteArray(BSL_VALUE, charac.getValue()); 
     msg.setData(mBundle); 
     msg.sendToTarget(); 
    } 
}; 

我希望應用程序顯示一個TextView接收到的電池電量。該套件將電池電量作爲整數發送,因此如果電平爲70%,則發送「70」。該代碼包含在活動類中的處理程序:

private Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     switch (msg.what) 
     { 
     case HRPService.HRP_VALUE_MSG: 
      Log.d(TAG, "mHandler.HRP_VALUE_MSG"); 
      Bundle data1 = msg.getData(); 
      final byte[] bslval = data1.getByteArray(HRPService.BSL_VALUE); 
      runOnUiThread(new Runnable() 
      { 
       public void run() 
       { 
        if (bslval != null) 
        { 
         try { 
          Log.i(TAG, "BYTE BSL VAL =" + bslval[0]); 
          TextView bsltv = (TextView) findViewById(R.id.BodySensorLocation); 
          bsltv.setText("\t" + mContext.getString(R.string.BodySensorLocation) 
            + getBodySensorLocation(bslval[0])); 
         } catch (Exception e) 
         { 
          Log.e(TAG, e.toString()); 

         } 

        } 
       } 
      }); 

     default: 
      super.handleMessage(msg); 
     } 
    } 
}; 

的問題是TextView中不顯示任何東西,當我在我的應用程序按下此鍵後,我連我的智能手機與套件。任何人都可以告訴我,問題在哪裏?

在此先感謝

+0

你能讀取「Log.i(TAG,」BYTE BSL VAL =「+ bslval [0]);」? – mass

回答

0

不確定你有什麼確切的套件。不確定他們是否都有電池電量測量硬件。也許這就是原因。