2012-03-17 5 views
5

Tôi đang tạo ứng dụng khởi động dịch vụ khi nút "Bắt đầu" được nhấn và dừng khi nút "Dừng" được nhấn. trong dịch vụ, tôi đăng ký người nghe cho cảm biến ACCELEROMETER để tôi nhận được giá trị gia tốc của x, y, z trục .. nhưng khi tôi dừng ứng dụng và hủy đăng ký người nghe khỏi cảm biến, ngay cả khi tôi nhận được giá trị gia tốc của mình.Làm cách nào để hủy đăng ký người nghe khỏi cảm biến sau khi ngừng dịch vụ?

Dưới đây là các mã:

// 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 
    } 
}; 

}

bất cứ ai có thể vui lòng giúp tôi ra ??

+0

Dịch vụ đó có thể cần được dừng bởi ứng dụng của bạn – zapl

+0

ứng dụng đang bị ứng dụng của tôi dừng lại. Hoạt động chính của ứng dụng của tôi dừng dịch vụ bằng cách gọi phương thức stopService(). – Nikunj

+0

có thể thấy rằng câu hỏi này cũ. Bạn đã tìm thấy một giải pháp? :) –

Trả lời

0

onDestroy() có thể không được hệ điều hành gọi ngay trên ứng dụng của bạn. Đặt số gọi stopListening() của bạn vào onPause()startListening() trong các chức năng onResume() của bạn. Bằng cách này, bạn được đảm bảo đăng ký ứng dụng và hủy đăng ký bằng các cảm biến.

+3

Vì tôi đang sử dụng dịch vụ chứ không phải hoạt động cho tệp java này, tôi không thể triển khai phương thức onResume() và onPause(). bạn có thể gợi ý cho tôi bất kỳ lựa chọn nào khác không. – Nikunj