Can';t在Android服务中注册多个传感器
我有一个从活动中调用的服务。此服务注册所有传感器并针对它们注册侦听器 编辑:我已删除onSensorChange()中的两行。 现在它可以工作了。为什么? 问题是,当我一次只注册一个传感器时,我的应用程序工作正常,但如果我注册了多个传感器,我的应用程序就会崩溃 以下是我的服务的OnCreate功能:Can';t在Android服务中注册多个传感器,android,android-service,android-sensors,Android,Android Service,Android Sensors,我有一个从活动中调用的服务。此服务注册所有传感器并针对它们注册侦听器 编辑:我已删除onSensorChange()中的两行。 现在它可以工作了。为什么? 问题是,当我一次只注册一个传感器时,我的应用程序工作正常,但如果我注册了多个传感器,我的应用程序就会崩溃 以下是我的服务的OnCreate功能: @Override public void onCreate() { super.onCreate(); mContext = getApplicationC
@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函数:
@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;
}
intent = new Intent(this, CustomSensorService.class);
startService(intent);
我在MyActivity onCreate函数中启动如下服务:
@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;
}
intent = new Intent(this, CustomSensorService.class);
startService(intent);
您的OnSensorChanged事件正在将sensorManager设置为Null,以便传感器一启动就不能再进行设置 编辑 如果希望每个传感器使用不同的侦听器,请使用类似的方法,而不是在活动上实现这些方法:
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) {
}
};
那么,我如何停止SensorListener?您可以按照之前的方式停止它,但在将sensorManager设置为null后,您无法注册另一个侦听器。不要取消sensorManager或分配manager.sensorManager.unregisterListener的另一个实例(此);这一行将注销所有传感器监听器?基本上,只要设置监听器,它就会启动并运行监听器代码,使其无效。然后,代码返回并尝试设置另一个侦听器,但sensorManager现在为空,因此会抛出一个NPEYes。您在所有传感器中使用相同的侦听器。