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中不顯示任何東西,當我在我的應用程序按下此鍵後,我連我的智能手機與套件。任何人都可以告訴我,問題在哪裏?
在此先感謝
你能讀取「Log.i(TAG,」BYTE BSL VAL =「+ bslval [0]);」? – mass