나는 CC2540 BLE 키트가 있으며 스마트 폰 어플리케이션의 키트 배터리 레벨을보고 싶습니다. 키트에서 배터리 잔량을 확인하는 코드를 만들었습니다. 이 경우 배터리 레벨은 BodySensor입니다.TI CC2540 Bluetooth 저에너지 키트로부터 데이터 수신
먼저 배터리 키트의 배터리 특성 값을 입력하겠습니다. 그래서 배터리 서비스에 대한 서비스 및 특성 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();
}
};
나는 응용 프로그램이 텍스트 뷰에서 수신 된 배터리 수준을 보여주고 싶다. 키트는 배터리 레벨을 정수로 전송하므로 레벨이 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);
}
}
};
문제는 내가 키트와 함께 스마트 폰을 연결 한 후 난 내 응용 프로그램에서이 버튼을 누를 때 텍스트 뷰가 아무것도 표시되지 않는다는 것입니다. 누군가가 문제가있는 곳을 말해 줄 수 있습니까?
미리 감사드립니다.
"Log.i (TAG,"BYTE BSL VAL = "+ bslval [0]);"에서 아무 것도 읽을 수 있습니까? – mass