You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin安卓应用中获取小米手环9 Active实时心率与步数?

小米手环9 Active 实时数据获取(Kotlin 安卓实现指南)

1. BLE通信:Kotlin 连接手环的实现

基础步骤(原生BLE API)

首先在AndroidManifest.xml中申请必要权限(适配不同Android版本):

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

用Kotlin实现扫描与连接的核心代码:

// 初始化BLE适配器
val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bluetoothAdapter = bluetoothManager.adapter

// 扫描设备
val scanner = bluetoothAdapter.bluetoothLeScanner
val scanCallback = object : ScanCallback() {
    override fun onScanResult(callbackType: Int, result: ScanResult) {
        super.onScanResult(callbackType, result)
        // 通过设备名称过滤小米手环9 Active
        if (result.device.name?.contains("Mi Band 9 Active") == true) {
            scanner.stopScan(this)
            connectToDevice(result.device)
        }
    }
}

// 权限检查后启动扫描
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED) {
    scanner.startScan(scanCallback)
}

// 连接设备并发现服务
private fun connectToDevice(device: BluetoothDevice) {
    val gattCallback = object : BluetoothGattCallback() {
        override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
            super.onConnectionStateChange(gatt, status, newState)
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                gatt?.discoverServices()
            }
        }

        override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
            super.onServicesDiscovered(gatt, status)
            if (status == BluetoothGatt.GATT_SUCCESS) {
                // 服务发现完成,可开始查找目标特征
            }
        }
    }
    device.connectGatt(this, false, gattCallback)
}

推荐库

  • RxAndroidBle:用响应式编程简化BLE操作,适配Kotlin协程,减少回调嵌套。
  • Android BLE Library:封装了常见BLE流程,提供更简洁的调用API。

2. 实时心率数据的UUID

小米手环9 Active支持标准BLE心率服务,对应UUID:

  • 心率服务UUID:0000180d-0000-1000-8000-00805f9b34fb
  • 心率测量特征UUID:00002a37-0000-1000-8000-00805f9b34fb
  • 客户端特征配置UUID(用于开启实时通知):00002902-0000-1000-8000-00805f9b34fb

找到特征后调用setCharacteristicNotification开启通知,在onCharacteristicChanged回调中解析字节数组:第一个字节为标志位,后续数值即为实时心率。

3. 步数统计的UUID

小米手环的步数数据在自定义BLE服务中,常用UUID组合:

  • 自定义服务UUID:0000fee0-0000-1000-8000-00805f9b34fb
  • 步数数据特征UUID:0000fee1-0000-1000-8000-00805f9b34fb

注意:步数为自定义字节格式,需参考开源项目(如Gadgetbridge)的解析逻辑,通常从字节数组中提取4字节无符号整数作为步数数值。

4. 设备专属SDK vs 原生BLE实现

  • 原生BLE直接实现:完全可行,但需处理小米的自定义协议(如数据加密、指令交互),开发周期长,需参考Gadgetbridge等开源项目的细节。
  • 第三方库(如Gadgetbridge):已完成小米手环9 Active的适配,包含完整的BLE连接、数据解析逻辑。可直接参考源码或集成核心模块,大幅节省开发时间。
  • 小米官方SDK:提供Mi Fit相关接口,但需申请开发者权限,API封闭性强,自定义空间有限。

总结:快速实现优先参考Gadgetbridge;需完全自定义则用原生BLE配合开源项目的UUID与解析逻辑。

内容的提问来源于stack exchange,提问作者이현구

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:01:22