如何停止服务后注销来自传感器的监听器? [英] How to unregister a listener from a sensor after stopping the service?

查看:1587
本文介绍了如何停止服务后注销来自传感器的监听器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建启动时,启动按钮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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆