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() не может быть вызван операционной системой на вашем приложении сразу. Поместите свой stopListening() звонок в onPause() и startListening() в свои onResume() функции. Таким образом, вы гарантированно зарегистрируете приложение и отмените регистрацию с помощью датчиков.

+3

Поскольку я использую службу, а не активность для этого java-файла, я не могу реализовать методы onResume() и onPause(). можете ли вы предложить мне другой вариант. – Nikunj

Смежные вопросы