2012-03-17 1 views
5

「開始」ボタンが押されたときにサービスを開始し、「停止」ボタンが押されたときにサービスを停止するアプリケーションを作成しています。このサービスでは、ACCELEROMETERセンサーのリスナーを登録して、x、y、z軸の加速度計の値を取得します。ただし、アプリケーションを停止してセンサーからリスナーを登録解除すると、加速度計の値が取得されます。サービスを停止した後にセンサーからリスナーの登録を解除するにはどうすればよいですか?

ここでは、コードです:

// Service 
public class Accel extends Service 
{ 
    private static Context CONTEXT; 
    private static Sensor sensor; 
    private static SensorManager sensorManager; 
    private static boolean running = false; 

    @Override 
    public void onCreate() 
    { 
    } 

    // code to execute when the service is shutting down 
    @Override 
    public void onDestroy() 
    { 
     if (isListening()) 
      stopListening(); 
    } 

    // code to execute when the service is starting up 
    @Override 
    public void onStart(Intent intent, int startid) 
    { 
     CONTEXT = this; 
     startListening(this); 
    } 

    public static Context getContext() 
    { 
     return CONTEXT; 
    } 

    // Returns true if the manager is listening to orientation changes 
    public static boolean isListening() 
    { 
     return running; 
    } 

    //Unregisters listeners 
    public static void stopListening() 
    { 
     running = false; 
     sensorManager.unregisterListener(sensorEventListener, sensor); 
    } 

    /** 
    * Registers a listener and start listening 
    * @param accelerometerListener 
    *    callback for accelerometer events 
    */ 
    public static void startListening(AccelerometerListener accelerometerListener) 
    { 
     sensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); 
     List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER); 
     if (sensors.size() > 0) 
     { 
      sensor = sensors.get(0); 
      running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_GAME); 
      listener = accelerometerListener; 
     } 
    } 

    /** 
    * The listener that listen to events from the accelerometer listener 
    */ 
    private static SensorEventListener sensorEventListener = 
    new SensorEventListener() 
    { 
    public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
    public void onSensorChanged(SensorEvent event) 
    { 
       // the code to perform on sensor change 
    } 
}; 

}

誰も私を助けてくださいことはできますか?

+0

このサービスは、あなたのアプリケーションによって停止する必要があります – zapl

+0

私のアプリによって停止されている。私のアプリケーションの主な活動は、stopService()メソッドを呼び出してサービスを停止します。 – Nikunj

+0

この質問は古いことがわかります。あなたは解決策を見つけましたか? :) –

答えて

0

onDestroy()は、すぐにあなたのアプリのOSによって呼び出されないことがあります。電話番号stopListening()を電話onPause()に、startListening()onResume()の機能に追加します。こうすることで、アプリの登録とセンサーの登録解除が保証されます。

+3

私はこのJavaファイルのためのアクティビティではなくサービスを使用しているので、onResume()とonPause()メソッドを実装することはできません。あなたは私に他の選択肢を提案できますか? – Nikunj

関連する問題