在主线程暂停时获取传感器值

时间:2013-11-14 20:43:42

标签: android android-sensors onpause sensormanager

有没有办法在主要电源暂停时从传感器获取值?

目标:我需要注册光传感器,主线必须等待10秒,然后我必须在这10秒后获得平均值。

问题:我必须在主线程中等待,所以如果我做了一段时间或睡眠,传感器没有得到任何值

我做了什么:我试图在另一个线程或asynctask中注册传感器,但如果我暂停主线程10秒钟(我尝试了一个睡眠,一个处理程序,一段时间和一个连接)没有任何反应。用户建议我使用Handler和onPause / onResume。我的实际代码是这样的,但是当主线程在等待时我仍然没有得到任何东西:

public class MyActivity
{
    private Lux light; //Lux implements SensorEventListener
    private SensorManager mSensorManager;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listeners);
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        light=new Lux();
        onPause();
    }

    @Override
    protected void onResume() 
    {
        mSensorManager.unregisterListener(light, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT));
        light.getAverage();
        super.onResume();
    }

    @Override
    protected void onPause() 
    {
        super.onPause();
        mSensorManager.registerListener(light, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_FASTEST);
        Handler h=new Handler();
        h.postDelayed(myTask, 10000);
    }

    private Runnable myTask = new Runnable() 
    {
        public void run() 
        {
            onResume();
        }
    };
}

请帮助我。

2 个答案:

答案 0 :(得分:0)

onPause / onResume不适合用户调用。它们必须仅由您的系统调用。

系统在主线程中调用

EventListener的方法,所以如果你以任何方式阻止它们,它们就不会被调用。

onCreate,而不是onPause发布可运行的,可以处理录制的数据。

虽然最好根据您的需要使用已启动的服务。

答案 1 :(得分:0)

我解决了这个问题。我觉得这更简单。

SensorManager mSensorMgr = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);

HandlerThread mHandlerThread = new HandlerThread("sensorThread");

mHandlerThread.start();

Handler handler = new Handler(mHandlerThread.getLooper());

mSensorMgr.registerListener(this, mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                    SensorManager.SENSOR_DELAY_FASTEST, handler);