我正在創建一個應用程序,在按下「開始」按鈕時啓動服務,並在按下「停止」按鈕時停止它。在服務中,我註冊了傳感器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
}
};
}
任何人都可以請幫我?
該服務可能需要由您的應用程序停止 – zapl 2012-03-17 14:32:48
它正在被我的應用程序停止。我的應用程序的主要活動通過調用stopService()方法來停止服務。 – Nikunj 2012-03-18 13:31:31
可以看到這個問題很老。你找到了解決方案嗎? :) – 2015-05-28 09:06:00