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();
        }
    };
}

私を助けてください。

4

2 に答える 2

0

onPause/onResume は、ユーザーによる呼び出しを意図していません。システムによってのみ呼び出される必要があります。

EventListenerのメソッドはシステムによってメインスレッドで呼び出されるため、何らかの方法で停止すると、呼び出されなくなります。

記録されたデータを処理するランナブルを投稿するのonCreateではなく、あなたの中に。onPause

必要に応じて、開始されたサービスを使用することをお勧めします。

于 2013-11-14T21:17:14.887 に答える