无法注册在Android的服务多个传感器 [英] Can't register more than one Sensor in Android Service

查看:348
本文介绍了无法注册在Android的服务多个传感器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个是从所谓的活动服务。该服务注册所有传感器和寄存器监听对付他们。

I have a service which is called from an Activity. This Service Registers all Sensors and Registers Listener against them.

编辑:我在onSensorChange()删除了两行

**sensorManager.unregisterListener(this);
        sensorManager = null;**

,现在它的作品。为什么?

问题是,当我在同一时间做出来的,我的应用程序工作正常,但如果我注册多个传感器,我的应用程序崩溃。

The Problem is that when I do them one at a time, my application works fine but if I register more than one sensor, My application crashes.

下面是我服务的OnCreate功能:

Here is the OnCreate Function of my Service:

@Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
        Toast.makeText(getApplicationContext(),"Service Created",Toast.LENGTH_SHORT).show();
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

        //mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mMagnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        //mGyro = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        //      mLinearAccelertion = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);

        //sensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
        //sensorManager.registerListener(this, mGyro, SensorManager.SENSOR_DELAY_NORMAL);
        //sensorManager.registerListener(this, mLinearAccelertion, SensorManager.SENSOR_DELAY_NORMAL);


    }

下面是我的onSensorChanged功能:

Here is my onSensorChanged Function:

    @Override
    public void onSensorChanged(SensorEvent event) {
        //Toast.makeText(mContext,"Heelooo" , Toast.LENGTH_SHORT).show();
        float[] values = event.values;
        Sensor mSensor = event.sensor;
        boolean res = CalculatePosition.calculateNewPosition(4.5F,5.3F);
        if(res){
            Toast.makeText(mContext, "Check", Toast.LENGTH_SHORT).show();
        }
        //CalculatePosition.test(event);
        sensorManager.unregisterListener(this);
        sensorManager = null;
}

我开始喜欢这个服务MyActivity的onCreate功能:

I am starting the service like this in MyActivity onCreate Function:

intent = new Intent(this, CustomSensorService.class);
        startService(intent);

推荐答案

您OnSensorChanged事件设置的SensorManager以使其尽快null作为传感器被触发没有更多可设定。

Your OnSensorChanged event is setting the sensorManager to Null so as soon as a sensor is fired no more can be set.

修改

如果您想每个传感器使用不同的监听器,使用这样的事情,而不是实现您的活动的方法:

If you want each sensor to use a different listener, use something like this instead of implementing the methods on your activity:

private void SetupSensors() {
    sensorManager.registerListener(MagneticListener, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL);
}

private SensorEventListener MagneticListener = new SensorEventListener() {

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        // Code here
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {

    }
};

这篇关于无法注册在Android的服务多个传感器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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