有没有办法在主要电源暂停时从传感器获取值?
目标:我需要注册光传感器,主线必须等待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();
}
};
}
请帮助我。
答案 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);