1

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

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

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

public class DataCollection implements SensorEventListener{...}

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

有人可以帮我吗?

4

1 回答 1

4

我假设你已经读过这个

因此,您可以将 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);
    }
}
于 2013-09-12T09:10:22.720 回答