不能在 Android 服务中注册多个传感器 [英] Can't register more than one Sensor in Android Service
问题描述
我有一个从 Activity 调用的服务.此服务注册所有传感器并针对它们注册侦听器.
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 Function 中启动这样的服务:
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.
编辑
如果您希望每个传感器使用不同的侦听器,请使用类似的方法,而不是在您的 Activity 中实现这些方法:
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屋!