2012-01-21 5 views
1

私の活動では、私は "onSensorChanged"メソッドでセンサーを監視しています。画面の向きを変更している間にセンサーを監視する方法は?

そのアクティビティのボタンが押されたとき(「onClick」メソッドで)、センサーの監視を開始します。

私はonPauseおよびonResumeメソッドでリスニングを登録および登録解除します。

public void onCreate(Bundle savedInstanceState) { 
    //Here i set "mySensor" 
} 

public void onClick(View view){ 
    sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST); 
} 

protected void onPause() { 
    sensorManager.unregisterListener(this, mySensor); 
} 

protected void onResume() { 
    sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST); 
} 

public final void onSensorChanged(SensorEvent event) { 
    //do things 
} 

問題は、画面の向きの変更があったとき、私はもう一度ボタンを押すまで、監視は停止し、「onSensorChanged」内の私は物事が停止し、ということである。ここでは

はコードです。

私は読んでいましたが、画面の向きが変わったときに私の活動が破壊されて再現されたようですが、そのプロセス中にセンサーの監視が止まらないようにしたいと思います。

どうすれば監視できますか?私はそれがバンドルを使用して行わなければならないと思うが、わからない。

Thanx。

答えて

1

あなたはいくつかの選択肢があります:あなたは、あなたのマニフェストに<application>android:nameによって定義され、アプリケーションのクラスにあなたのセンサーのリスナーを移動することができます

  1. を。 android.app.Applicationから派生したクラスの名前を付けてhereを参照してください。私はこのアプローチをお勧めします。

  2. あなたはマニフェストあなたの活動にandroid:configChanges="orientation"を追加することができますが、説明hereとして、あなたは、あなたの活動のでは、このような方向特定のレイアウトなどの適切なリソースの再読み込みを処理する必要があります。他の設定変更が発生したときにモニタリングが消えてしまったり、アプリケーションがそれらを処理する方法を工夫して、それらをandroid:configChangesの変更リストに追加する必要がありますので、これをお勧めしません。

  3. 無効の向きを説明hereようandroid:screenOrientationを使用して、アプリケーションのために完全に変化していますが、特定の向きでのみ仕事にアプリケーションをする理由、他の理由がある場合を除き、私は本当にこのことをお勧めしません。

+0

Thanxの回答を参照してください。私はこれが私が必要なものだと思う:) – Alex

0

実際、Androidのアクティビティは、デバイスの向きが変わったときに破壊されて再作成されます。すべてのオリエンテーションを気にしない場合は、アクティビティを1つのオリエンテーションに制限することができます。

また、複数の方向(デフォルト)のサポートを提供する場合は、センサー読み取り部分を静的なシングルトン(必要なアクティビティから呼び出す)に移動するか、 Applicationクラス、またはApplicationクラスのサブクラスで参照される別のクラス)を呼び出すことができます。getApplication() — Applicationクラスの詳細については、thisを参照してください。 3つの選択肢はすべて、一般的なアクティビティ全体でグローバルな状態を維持するためのかなり適切な選択肢です。

アプリケーションがバックグラウンドであってもアプリケーションが終了してもセンサデータを読み続ける場合は、サービスを使用してデータを前後に渡すことですアプリが実行中のとき

+0

Thanxについては、アプリケーションクラス – Alex

関連する問題