センサー関連のすべてを処理できるクラスを実装したいと考えてSensorManager
いましたが、これには明らかに新しいアクティビティを起動する必要があります。
私はこれを行うつもりはありませんでした-計算を実行するだけです。サービスでこれを処理する最善の方法はありますか?サービスからアクティビティ メソッドを呼び出すことはできますか?
センサーを管理するクラス (アクティビティではない) を作成することは絶対に可能です。センサーに「サブスクライブ」するには、SensorManager が必要であるという事実は正しいです。ただし、どのクラスでも SensorManager をインスタンス化できます。
クラス「mySensorClass」は次のように始まると想像できます (加速度計からデータを収集したいとします)。
public class mySensorClass implements SensorEventListener {
public static final String TAG = "mySensorClass";
private SensorManager mSensorManager;
private Sensor mAccelerometer;
[...]
次に、コンストラクターで、SensorManager をインスタンス化して登録します。
public DeviceOrientation(Context context) {
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
最後に、次のメソッドを使用して、加速度計から受け取ったデータをクラス変数に格納します。
@Override
public void onSensorChanged(SensorEvent event) { ... }
最終的に、アクティビティは「mySensorClass」のインスタンスを作成するだけで、加速度計から最後の測定値を取得できます。