Android蓝牙获得心率测量

时间:2015-07-24 10:16:58

标签: android android-bluetooth android-ble

我想获得“A& D UA-651BLE”设备的HRM值。 这是用于获取HRM值的设备数据表中的内容:

  
      
  1. 将应用程序设置为配对模式以开始扫描。
  2.   
  3. 按照每个使用说明书开始配对A& D BLE设备。
  4.   
  5. 在配对模式下,应用程序应设置时间和日期以及任何其他设备设置   到A& D BLE设备。配对成功后,A& D BLE设备在屏幕上显示“结束”。
  6.   
  7. 进行测量并完成测量,然后A& D BLE设备启动BLE   与广告的联系。应用程序以适当的间隔开始扫描   该应用程序尽快捕获A& D BLE设备的广告。
  8.   
  9. 在初始连接或配对时,应用程序将“2”设置为CCCD(客户端特性   配置描述符)使A& D BLE设备发送测量数据   指示。
  10.   
  11. A& D设备识别出设置为“2”到CCCD并同步时间和日期   连接后5秒内,使用Indication发送数据。
  12.   
  13. 如果超时设置CCCD和时间和日期到期,A& D BLE设备将不会发送数据   并将数据存储在内存中。 A& D BLE设备中存储的数据可以接下来发送   成功的联系。
  14.   

这是我的服务代码:

public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
                                              boolean enabled) {
        if (mBluetoothAdapter == null || mBluetoothGatt == null) {
            Log.w(TAG, "BluetoothAdapter not initialized");
            return;
        }

        mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);

        // This is specific to Heart Rate Measurement.
        if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
            BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                    UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
            descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
            mBluetoothGatt.writeDescriptor(descriptor);
        }
    }

这是读取数据的方法:

final byte[] data = characteristic.getValue();
            if (data != null && data.length > 0) {
                final StringBuilder stringBuilder = new StringBuilder(data.length);
                for(byte byteChar : data)
                    stringBuilder.append(String.format("%02X ", byteChar));
                Log.e("HRM value",stringBuilder.toString());
                dataComposition.put(characteristic.getUuid().toString(),stringBuilder.toString());
                intent.putExtra(EXTRA_DATA,dataComposition);
            }

问题是这段代码没有返回任何数据!!

3 个答案:

答案 0 :(得分:4)

Google样本代码不包含RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?whatever=([^\&\ ]+) RewriteRule ^/?test\.php$ /test/%1? [L,R=301] import requests import requests.auth import json def assign(key, name): url = "http://xxx/rest/api/2/issue/" + key headers = {'Content-type': 'application/json', 'Accept': 'application/json'} data = json.dumps({"fields": {"assignee": {"name": name}}}) r = requests.put(url, data=data, headers=headers, auth=requests.auth.HTTPBasicAuth('fred', 'fred')) print(r.status_code) print(r.json()) 的方法。 在您的情况下,您必须首先写入时间值,将write值更改为2,然后设备将向您发送HRM值。要做到这一点,你可以在这个repository写入和指示方法中找到它,你只需将它们集成到你的代码中。

答案 1 :(得分:3)

有一个Android Open Source Project example可以做到这一点,最简单的选择是克隆android-BluetoothLeGatt code,构建并将其与您自己的比较。如果您无法发现差异/问题,只需部署应用程序并逐步执行这两组代码。拥有一些已知的工作代码也有助于排除HRM无法正常运行的可能性。

答案 2 :(得分:0)

你有和例子,我尝试使用相同的设备,我无法获得信息和尝试

public String response() {
if (mConnected) {
    mBluetoothLeService.readCharacteristic(characteristica);
    byte response[] = characteristica.getValue();
    String respuesta = ReadBytes(response);
    mBluetoothLeService.disconnect();
    return respuesta;
} else {
    return null;
}
}