如何编写一个类来读取android中的传感器值

时间:2013-09-12 09:00:04

标签: android android-sensors

我是Android的初学者。我想读一些传感器值,如加速度计和陀螺仪。 我在网站上阅读了教程,发现它应该使用SensorEventListener

public class MainActivity extends Activity implements SensorEventListener{...}

但是我想编写一个类来读取传感器值,而不是在MainActivity中,因为它似乎在Main中编写并不遵循“软件工程”规则。是否可以写如下:

public class DataCollection implements SensorEventListener{...}

使用MainActivity调用DataCollection读取传感器值并返回MainActivity?

有人可以帮我吗?

1 个答案:

答案 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);
    }
}