问题描述
我创建了一个从各种传感器读取数据的应用程序。问题是在使用湿度和温度传感器的情况下,不会显示任何信息。其他传感器可以正常工作。
正确工作的光传感器代码:
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加固型设备带有温度计。