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

Android Studio开发温度显示App报错:SensorManager停止运行求助

问题分析与修复方案

核心问题1:空指针异常导致崩溃

大部分消费级Android设备没有环境温度传感器(Sensor.TYPE_AMBIENT_TEMPERATURE),调用sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE)会返回null。后续在onResume中传入null的传感器对象注册监听,直接触发空指针异常,导致App崩溃。

核心问题2:setText参数类型错误

tempValues.setText((int) event.values[0]);中,传入整数会被Android当作字符串资源ID处理,而非直接显示温度数值,这会导致要么显示错误内容,要么触发资源未找到异常。


修复后的完整代码

MainActivity.java

package com.zybooks.sensormanager;

import androidx.appcompat.app.AppCompatActivity;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor thermometer;
    private TextView tempValues;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        thermometer = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
        tempValues = findViewById(R.id.temperatureValues);

        // 提前检查传感器是否存在,给用户明确提示
        if (thermometer == null) {
            tempValues.setText("设备无环境温度传感器");
        }
    }

    @Override
    public final void onAccuracyChanged(Sensor sensor, int accuracy) {
        // 传感器精度变化时的处理(按需实现)
    }

    @Override
    public final void onSensorChanged(SensorEvent event) {
        // 将温度值转为字符串后设置,保留一位小数更直观
        float temperature = event.values[0];
        tempValues.setText(String.format("当前温度:%.1f°C", temperature));
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 仅在传感器存在时注册监听,避免空指针
        if (thermometer != null) {
            sensorManager.registerListener(this, thermometer, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 传感器存在时才取消注册,避免空指针
        if (thermometer != null) {
            sensorManager.unregisterListener(this, thermometer);
        }
    }
}

额外提示

如果你的设备确实没有环境温度传感器,可尝试使用已弃用的Sensor.TYPE_TEMPERATURE(该传感器通常返回电池/CPU的温度,并非环境温度),替代代码如下:

thermometer = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);

注意:此API已被标记为弃用,仅作为临时测试方案,不推荐正式使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:55:31