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」内で行うことが停止することです。

読んでいて、画面の向きが変わるとアクティビティが壊れて再作成されるようですが、その過程でセンサーの監視が止まらないようにしたいです。

どうすれば監視を維持できますか? バンドルを使用して行う必要があると思いますが、よくわかりません。

ありがとう。

4

2 に答える 2

1

いくつかの選択肢があります:

  1. センサー リスナーを、マニフェストandroid:nameの inで定義されたアプリケーション クラスに移動できます。here<application>を参照して、 android.app.Applicationから派生したクラスに名前を付けます。このアプローチをお勧めします。

  2. android:configChanges="orientation"アクティビティ マニフェストに追加することはできますが、ここで説明されているように、方向固有のレイアウトなどの適切なリソースの再読み込みをonConfigurationChanged()アクティビティの で処理する必要があります。他の構成変更が発生したときに監視が消えるという問題がまだ残っているか、アプリケーションがそれらをどのように処理する必要があるかを検討する必要があるため、これはお勧めしません (および の変更のリストに追加しますandroid:configChanges)。

  3. hereandroid:screenOrientationで説明されているように使用して、アプリケーションの向きの変更を完全に無効にしましたが、アプリケーションを特定の向きでのみ動作させたい他の理由がない限り、これはお勧めしません。

于 2012-01-21T20:21:48.703 に答える
0

実際、Android のアクティビティは、デバイスの向きが変わると破棄され、再作成されます。すべての向きを気にしない場合は、アクティビティを 1 つの向きに「制限」できます。

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

アプリケーションがバックグラウンドにある場合やアプリケーションが終了した後でもセンサー データを読み取り続けたい場合は、もう少し堅牢な方法として、サービスを使用し、アプリが動作しているときにアクティビティとの間でデータをやり取りする方法があります。ランニング。

于 2012-01-21T20:07:51.787 に答える