此后续服务检测光强度,并在每次传感器更改事件时将其值写入文件中。我想要的是,每当调用此服务时,它都应该在那时写入sensor的值。不更换传感器。
我的以下代码:
public class LightIntensity extends Service {
private SensorManager mSensorManager;
private SensorEventListener mEventListenerLight;
private float lastLightValue;
@Override
public void onCreate() {
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mEventListenerLight = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
lastLightValue = values[0];
createLog();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}
@Override
public void onStart(Intent intent,int startId) {
mSensorManager.registerListener(mEventListenerLight, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
public void onDestroy() {
mSensorManager.unregisterListener(mEventListenerLight);
super.onDestroy();
}
private void createLog() {
String data = String.valueOf(lastLightValue);
String file_name = "light_log";
try {
FileOutputStream fos = openFileOutput(file_name, MODE_APPEND);
fos.write(data.getBytes());
fos.close();
Toast.makeText(getApplicationContext(), "Message Saved", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
Toast.makeText(getApplicationContext(), "File not found :" + e, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "IO exception : " + e, Toast.LENGTH_SHORT).show();
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
最佳答案
我不知道一种直接在Android中按需查询Sensor
的方法。
但是,您可以使用两类方法来完成此操作。
如上所述,创建注册LightManager
侦听器的单例OnChange
。每次更改时,将当前的光照值存储在名为lastLightValue
的变量中。
代替您的LightIntensity
类注册Sensor
更改,它只会访问LightManager.getInstance().lastLightValue
。