将环境温度固定在 Android
Fix the ambient Temperature in Android
我成功制作了一个应用程序来测量 Android 工作室的环境温度。但是下一步不想工作。重点是:
- 当我启动应用程序时,温度应该显示在 1 个文本视图中(目前有效)。然后它应该保持在这个温度但是它会改变。我只想测一次温度
- 当我点击提交时,它会对第二个 textView 执行相同的操作。
我在时间上成功地做到了,但是在温度下,它不起作用。我的第二个问题是,我做了很多研究,看起来温度总是以 °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;
}
}
我成功制作了一个应用程序来测量 Android 工作室的环境温度。但是下一步不想工作。重点是:
- 当我启动应用程序时,温度应该显示在 1 个文本视图中(目前有效)。然后它应该保持在这个温度但是它会改变。我只想测一次温度
- 当我点击提交时,它会对第二个 textView 执行相同的操作。
我在时间上成功地做到了,但是在温度下,它不起作用。我的第二个问题是,我做了很多研究,看起来温度总是以 °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;
}
}