为什么Android湿度传感器不起作用?

问题描述

我创建了一个从各种传感器读取数据的应用程序。问题是在使用湿度和温度传感器的情况下,不会显示任何信息。其他传感器可以正常工作。

正确工作的光传感器代码

public class LightFragment extends Fragment implements SensorEventListener {

TextView lightTV;
SensorManager sensorManager;
Sensor lightSensor;

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_light,container,false);

    lightTV = (TextView) v.findViewById(R.id.LightValue);

    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);

    lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

    sensorManager.registerListener(LightFragment.this,lightSensor,SensorManager.SENSOR_DELAY_norMAL);
}


@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    Sensor sensor = sensorEvent.sensor;
    if (sensor.getType() == Sensor.TYPE_RELATIVE_HUMIDITY) {

        lightTV.setText(String.format("%.2f",+(int) sensorEvent.values[0]) + "\t\t\t" + "[lux]");

    } else {

        lightTV.setText("Light Sensor not supported on this device");
    }
}

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

}

湿度传感器代码

public class HumiFragment extends Fragment implements SensorEventListener {

TextView humiTV;
SensorManager sensorManager;
Sensor humiditySensor;

@Override
public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_humi,false);

    humiTV = (TextView) v.findViewById(R.id.HumiValue);

    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);

    humiditySensor = sensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);

    sensorManager.registerListener(HumiFragment.this,humiditySensor,SensorManager.SENSOR_DELAY_norMAL);
}


@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    Sensor sensor = sensorEvent.sensor;
    if (sensor.getType() == Sensor.TYPE_RELATIVE_HUMIDITY) {

        humiTV.setText(String.format("%.2f",+sensorEvent.values[0]) + "\t\t\t" + "[%]");

    } else {

        humiTV.setText("Humidity Sensor not supported on this device");
    }
}

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

}

温度传感器代码

public class TempFragment extends Fragment implements SensorEventListener {

TextView tempTV;
SensorManager sensorManager;
Sensor tempSensor;

@Override
public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_temp,false);

    tempTV = (TextView) v.findViewById(R.id.TempValue);

    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);

    tempSensor = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);

    sensorManager.registerListener(TempFragment.this,tempSensor,SensorManager.SENSOR_DELAY_norMAL);
}


@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    Sensor sensor = sensorEvent.sensor;
    if (sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {

        tempTV.setText(String.format("%.4f",+sensorEvent.values[0]) + "\t\t\t" + "[°C]");

    } else {

        tempTV.setText("Temperature Sensor not supported on this device");
    }
}

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

}

您可以看到所有代码都非常相似,但是onSensorChanged仅在光传感器中有效。我检查了三个不同设备(小米,三星,华为)上的应用程序,并且在这两个特定传感器上均不起作用。 onSensorChanged函数应该显示有关缺少对传感器的支持的信息,但是不存在。两个传感器不工作并且不返回任何信息的原因是什么?

解决方法

Galaxy S4和Note 3是唯一带有湿度计(湿度传感器)和温度计的商业发行设备。某些CAT加固型设备带有温度计。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...