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

Android Studio中无法调用心率传感器问题求助

心率传感器无法读取数据的解决方案

针对光传感器正常工作但心率传感器无响应的问题,从权限、代码逻辑两方面给出修复方案:

1. 动态申请身体传感器权限

Android 6.0(API 23)及以上版本中,BODY_SENSORS属于危险权限,仅在Manifest中声明无法直接获取权限,必须在运行时主动申请。

权限申请逻辑

在MainActivity中添加权限检查与申请代码:

import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import com.example.smartwatchprueba2.databinding.ActivityMainBinding;

public class MainActivity extends Activity {
    private TextView mTextView, mTextView1;
    private ActivityMainBinding binding;
    private SensorManager sensorManager;
    private static final int REQUEST_BODY_SENSORS = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        mTextView = binding.textView;
        mTextView1 = binding.textView1;

        // 检查权限
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.BODY_SENSORS)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{android.Manifest.permission.BODY_SENSORS},
                    REQUEST_BODY_SENSORS);
        } else {
            initSensors();
        }
    }

    // 处理权限申请结果
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_BODY_SENSORS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initSensors();
            } else {
                mTextView1.setText("需授予身体传感器权限才能读取心率");
            }
        }
    }

    // 初始化传感器
    private void initSensors() {
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        Sensor sensorLuz = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        Sensor sensorRitmoCardiaco = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);

        // 检查设备是否支持心率传感器
        if (sensorRitmoCardiaco == null) {
            mTextView1.setText("当前设备不支持心率传感器");
            return;
        }

        sensorManager.registerListener(listener, sensorLuz, SensorManager.SENSOR_DELAY_NORMAL);
        // 心率传感器使用更高的更新频率
        sensorManager.registerListener(listener1, sensorRitmoCardiaco, SensorManager.SENSOR_DELAY_FASTEST);
    }

    SensorEventListener listener=new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            float value = sensorEvent.values[0];
            mTextView.setText("当前光照强度: " + value + " lx");
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {}
    };

    SensorEventListener listener1=new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            float value1 = sensorEvent.values[0];
            // 修复控件覆盖问题,用mTextView1显示心率
            mTextView1.setText("当前心率: " + value1);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {}
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener);
            sensorManager.unregisterListener(listener1);
        }
    }
}

2. 修复文本控件覆盖问题

原代码中心率回调错误使用了光传感器的显示控件mTextView,导致心率数据被光照数据覆盖,已改为使用mTextView1显示心率。

3. 额外注意事项

  • 确保手表正确佩戴,心率传感器需要接触皮肤才能采集有效数据;
  • 部分设备需在系统设置中单独开启应用的心率数据访问权限;
  • 心率传感器建议使用SENSOR_DELAY_FASTEST或SENSOR_DELAY_GAME的更新频率,SENSOR_DELAY_NORMAL可能无法及时获取数据。

内容的提问来源于stack exchange,提问作者lewis04

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:50:19