如何停止服务后注销来自传感器的监听器? [英] How to unregister a listener from a sensor after stopping the service?
问题描述
我创建启动时,启动按钮pressed服务并停止它,当一个应用程序停止按钮是pressed。在服务上,我注册sensor重力感应的侦听器,这样我得到的X,Y,Z轴的加速度值..但是,当我停止我的应用程序,并注销从传感器监听器,即使在当时我得到我的加速度值。
I'm creating an app that starts a service when "Start" button pressed and stops it when "Stop" button is pressed. in the service, I register a listener for sensor ACCELEROMETER so that I get the accelerometer values of x,y,z axes.. but when I stop my application and unregister the listener from the sensor, even then I get my accelerometer values.
这里的code:
// 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
}
};
}
任何人都可以请帮我??
Can anyone please help me out??
推荐答案
的onDestroy()
不得由您的应用程序的操作系统马上被调用。请将您的的stopListening()
调入的onPause()
和 startListening()
在 onResume()
功能。你保证通过这种方式让应用程序寄存器和传感器注销本身。
onDestroy()
may not be called by the OS on your app straight away. Place your stopListening()
call into onPause()
, and startListening()
in your onResume()
functions. This way you are guaranteed to have the app register and unregister itself with the sensors.
这篇关于如何停止服务后注销来自传感器的监听器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!