使用小米MiBand和BLE进行心率测量

我正在尝试实施简单的SDK与健身追踪器小蜜咪带工作。 目前我可以跟踪步骤,促动振动,处理传感器触摸,但我有心率测量问题。 我的SDK基于https://github.com/pangliang/miband-sdk-android 。 为了测量心率,我需要将描述符写入适当的特征,以便在该特征值改变时处理callback,然后将适当的数据写入心率控制点特征,以直接启动心率测量过程。 问题是,在开始这个过程的数据被成功地写入特征(当Mi Band开始测量心率然后底部传感器闪烁绿色)之后,心率测量过程没有开始。 这可能是由一个新的健身追踪器固件(固件版本:4.15.12.10; HeartRate版本:1.3.74.64)或我的代码中存在一些缺陷:

/-------- MiBandProfile --------/ public static final UUID UUID_SERVICE_HEARTRATE = UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_NOTIFICATION_HEARTRATE = UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_CHAR_HEARTRATE = UUID.fromString("00002a39-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_DESCRIPTOR_UPDATE_NOTIFICATION = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"); /-------- MiBandProtocol --------/ public static final byte[] START_HEART_RATE_SCAN = {21, 1, 1}; /-------- BleProvider --------/ public class BleProvider extends BluetoothGattCallback { public interface NotifyListener { void onNotify(byte[] data); } private HashMap<UUID, NotifyListener> mNotifyListeners = new HashMap<UUID, NotifyListener>(); . . . public void setNotifyListener(UUID serviceUUID, UUID charaUUID, NotifyListener listener) { //enable chara notofication if (this.mGatt == null || !this.mIsServicesDiscovered) { if (DBG) Log.d(Debug.TAG, "Device is not connected or services are not discovered"); return; } BluetoothGattCharacteristic chara = this.mGatt.getService(serviceUUID).getCharacteristic(charaUUID); if (DBG) Log.d(Debug.TAG, "setCharacteristicNotification: " + this.mGatt.setCharacteristicNotification(chara, true)); BluetoothGattDescriptor descriptor = chara.getDescriptor(MiBandProfile.UUID_DESCRIPTOR_UPDATE_NOTIFICATION); if (DBG) Log.d(Debug.TAG, "setValue: " + descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)); if (DBG) Log.d(Debug.TAG, "writeDescriptor: " + this.mGatt.writeDescriptor(descriptor)); this.mNotifyListeners.put(charaUUID, listener); } @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { //this method must be called when the characteristic value was changed but nothing happened :( super.onCharacteristicChanged(gatt, characteristic); if (this.mNotifyListeners.containsKey(characteristic.getUuid())) { this.mNotifyListeners.get(characteristic.getUuid()).onNotify(characteristic.getValue()); } } } //end BleProvider . . . setNotifyListener(MiBandProfile.UUID_SERVICE_HEARTRATE, MiBandProfile.UUID_NOTIFICATION_HEARTRATE, new BleProvider.NotifyListener(){...}); //waiting few seconds writeCharacteristic(MiBandProfile.UUID_SERVICE_HEARTRATE, MiBandProfile.UUID_CHAR_HEARTRATE, MiBandProtocol.START_HEART_RATE_SCAN); 

也许该协议已被弃用,有人可以分享我一个新的协议。 我会很高兴的)谢谢。

Solutions Collecting From Web of "使用小米MiBand和BLE进行心率测量"

我解决了这个问题! 在调用setNotifyListener来跟踪脉冲值的变化之前,您必须将用户信息(年龄,体重)写入适当的特征,因为如果没有这个Mi带,则不会开始测量。

我正在和BLE A&D合作,来实现我使用的forms:

findUUID

  @SuppressLint("NewApi") private void displayGattServicesService(List<BluetoothGattService> gattServices) { // salida.append("Buscando servicio"); if (gattServices == null) return; for (BluetoothGattService gattService : gattServices) { String uuid = gattService.getUuid().toString(); List<BluetoothGattCharacteristic> gattCharacteristics = gattService .getCharacteristics(); if (uuid.equals("00001810-0000-1000-8000-00805f9b34fb")) { // salida.append("Ecnontro"); for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { String uuid1 = gattCharacteristic.getUuid().toString(); if (uuid1.equals("00002a35-0000-1000-8000-00805f9b34fb")) { // salida.append("Envio caracterisitca"); mensaje(getResources().getString(R.string.Espere_res)); mBluetoothLeService.setCharacteristicNotification( gattCharacteristic, true); } } } } } 

设置UUID

 BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) { // Show all the supported services and characteristics on the user interface. displayGattServicesService(mBluetoothLeService.getSupportedGattServices()); 

使用BleGatt示例https://github.com/googlesamples/android-BluetoothLeGatt