我是Android的初学者。我想读一些传感器值,如加速度计和陀螺仪。 我在网站上阅读了教程,发现它应该使用SensorEventListener
public class MainActivity extends Activity implements SensorEventListener{...}
但是我想编写一个类来读取传感器值,而不是在MainActivity中,因为它似乎在Main中编写并不遵循“软件工程”规则。是否可以写如下:
public class DataCollection implements SensorEventListener{...}
使用MainActivity调用DataCollection读取传感器值并返回MainActivity?
有人可以帮我吗?
答案 0 :(得分:3)
我假设您已阅读this。
因此,您可以将SensorEventListener与MainActivity分开。您只需在MainActivity中正确注册您的侦听器(由DataCollection对象替换'this'):
mSensorManager.registerListener(yourDataCollectionObject, mLight, SensorManager.SENSOR_DELAY_NORMAL);
你还必须取消注册:
mSensorManager.unregisterListener(yourDataCollectionObject);
它应该可以正常工作。
编辑:你可以这样试试。public class MainActivity extends Activity{
DataCollection mDataCollection = null;
@Override
public final void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDataCollection = new DataCollection(this);
}
@Override
protected void onResume(){
super.onResume();
mDataCollection.register();
}
@Override
protected void onPause(){
super.onPause();
mDataCollection.unregister();
}
}
public class DataCollection implements SensorEventListener{
private SensorManager mSensorManager;
private Sensor mLight;
public DataCollection(Context context){
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1){
// TODO
}
@Override
public void onSensorChanged(SensorEvent arg0){
// TODO
}
public void register(){
mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
}
public void unregister(){
mSensorManager.unregisterListener(this);
}
}