0

有没有办法在主线程暂停时从传感器获取值?

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

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

我尝试了什么:我尝试在另一个线程或异步任务中注册传感器,但如果我将主线程暂停 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();
        }
    };
}

请帮我。

4

2 回答 2

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);
于 2013-11-14T22:40:40.740 回答
0

onPause/onResume 不适用于用户调用。它们只能由您的系统调用。

EventListener的方法由系统在主线程中调用,所以如果你以任何方式停止它,它们就不会被调用。

在你的onCreate,而不是在onPausepost 一个可运行的,它将处理记录的数据。

尽管最好使用已启动的服务来满足您的需求。

于 2013-11-14T21:17:14.887 回答