此后续服务检测光强度,并在每次传感器更改事件时将其值写入文件中。我想要的是,每当调用此服务时,它都应该在那时写入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

10-08 17:13