在一个ACtivity中将许多传感器组合在一起

时间:2014-01-12 11:36:53

标签: android class

我正在创建一个使用许多不同传感器的应用。每个传感器都有自己的类,因为每个传感器都会将值直接记录到内部数据库中。

一个活动ActivityRecord将有一个按钮,用于执行传感器类中负责方法的激活。

    RecordButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Start/Stop Recording
            if (!isRecording) {
                startRecording();

                RecordButton.setText("Stop Recording");
            } else {

                stopRecording();
                RecordButton.setText("Start Recording");
            }

        }

    });

    return rootView;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}

private void startRecording() {

    isRecording = true;

    //Light Sensor stuff here

    }

现在我有一个LightSensor.java类,其最终输出如下:

public void onSensorChanged(SensorEvent event) {
    lightLux = event.values[0]; //Final output of this sensor.
    Lux = String.valueOf(lightLux);
    Log.d("LightSensor", Lux);

    TextView tvLightSensorLux = (TextView) findViewById(R.id.tvLightSensorLux);
    tvLightSensorLux.setText(Lux);

}

lightLux是浮点输出或Lux输出的字符串。因此,在FragmentRecord.java中,我想将LightSensor lightLux或Lux的setText的输出显示为tv。

问题:如何从LightSensor.java获取lightLux和Lux的值到FragmentRecord.java?这将适用于我将来创建的所有其他传感器。

我已导入* .LightSensor

1 个答案:

答案 0 :(得分:1)

当有更新内容时,您的传感器类应通知活动。

选项1 - 定义如下界面:

interface OnSensorChanges {
    void onSensorChanged(int sensorId, double sensorValue);
}

在您的活动中实施它并将其传递给您的每个传感器。传感器将在界面上调用该方法,您的活动将更新UI。

当然,如果并非所有传感器都发送一个数字(一些发送坐标),您应该将值包装在Bundle中(因为单个接口比多个接口IMO更好)。

选项2 - 如果您想要更像“类似Android”的解决方案:

在服务中实现传感器侦听器,并发送广播以报告传感器更改。你最好使用LocalBroadcastManager来使事情变得更精简。请注意LocalBroadcastManager是支持库的一部分。