2013-11-14 17 views
0

有沒有辦法在主幹暫停時從傳感器獲取值?在主線程暫停時獲取傳感器值

目標:我需要註冊光線傳感器,主線程必須等待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

我這樣解決了。我認爲這很簡單。

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); 
0

onPause/onResume不適合用戶調用。它們只能由您的系統調用。

EventListener的方法被系統在主線程中調用,所以如果你用任何方式阻止它們,它們就不會被調用。

在您的onCreate中,而不是在中發佈一個可運行的,它將處理記錄的數據。

儘管最好使用已啓動的服務滿足您的需求。

+0

因此,我需要在oncreate runnable做到底是什麼?對不起,我上個月開始使用android。 –