将环境温度固定在 Android

Fix the ambient Temperature in Android

我成功制作了一个应用程序来测量 Android 工作室的环境温度。但是下一步不想工作。重点是:

我在时间上成功地做到了,但是在温度下,它不起作用。我的第二个问题是,我做了很多研究,看起来温度总是以 °c 显示。我可以更改它以便想要 °F 的人可以这样得到它吗?

不更改值的温度代码,并带有用于在 textView2 上获取温度的按钮:

主要活动:

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private TextView textView, textView2;
    private Button button;
    private SensorManager sensorManager;
    private Sensor tempSensor;
    private Boolean isTemperatureSensorAvailable;

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

        textView = findViewById(R.id.textView);
        textView2 = findViewById(R.id.textView2);
        button = findViewById(R.id.button);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        if(sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE) !=null) {
            tempSensor = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
            isTemperatureSensorAvailable = true;
        }else{
            textView.setText("Temperature Sensor is not available");
            isTemperatureSensorAvailable = false;
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    @Override
    protected void onResume(){
        super.onResume();
        if(isTemperatureSensorAvailable){
            sensorManager.registerListener(this,tempSensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }


    @Override
    protected void onPause(){
        super.onPause();
        if(isTemperatureSensorAvailable){
            sensorManager.unregisterListener(this);
        }
    }

    private void update_text_unit()//Run from button
    {
        boolean toogle = false;
        float temperature = 0;
        float C_temp = 0;
        float F_temp =0;
        //Get sensor data
        Sensor temp = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
        F_temp = (C_temp * (9/5) +32);//Convert to °F
        if(toogle = true) {
            textView2.setText("Temp is:" + C_temp + "°C");
            toogle = false;
        }
        else {
            textView2.setText("Temp is:" + F_temp + "°F");
            toogle = true;
        }
    }
}

我希望有人能帮助我走向更好的方向。

感谢您的帮助。

在第一个代码中,您更改了传感器部分,因此每次都会 运行 导致您的问题。在您创建所有 API 以获取一次温度并将其作为字符串添加到文本视图中。对于 °C 到 °F,您需要进行转换。我会手动执行此操作:

(X°C × 9/5) + 32 = result_°F

其中 X 是输入温度,结果是以 °F 为单位的输出。

这是按钮温度变化功能的示例,但不确定您如何读取温度,因此 Sensor.gettemp 行可能需要更改。 运行 这来自按下按钮,它将更新您的文本视图

private void update_text_unit()//Run from button
    {
        boolean toogle = false;
        float temperature = 0;
        float C_temp = 0;
        float F_temp =0;
        //Get sensor data
        C_temp = Sensor.gettemp();
        F_temp = (C_temp * (9/5) +32);//Convert to °F
        if(toogle = true) {
            yourtextview.setText("Temp is:" + C_temp + "°C");
            toogle = false;
        }
        else {
            yourtextview.setText("Temp is:" + F_temp + "°F");
            toogle = true;
        }
    }