我正在创建一个使用许多不同传感器的应用。每个传感器都有自己的类,因为每个传感器都会将值直接记录到内部数据库中。
一个活动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
答案 0 :(得分:1)
当有更新内容时,您的传感器类应通知活动。
选项1 - 定义如下界面:
interface OnSensorChanges {
void onSensorChanged(int sensorId, double sensorValue);
}
在您的活动中实施它并将其传递给您的每个传感器。传感器将在界面上调用该方法,您的活动将更新UI。
当然,如果并非所有传感器都发送一个数字(一些发送坐标),您应该将值包装在Bundle
中(因为单个接口比多个接口IMO更好)。
选项2 - 如果您想要更像“类似Android”的解决方案:
在服务中实现传感器侦听器,并发送广播以报告传感器更改。你最好使用LocalBroadcastManager
来使事情变得更精简。请注意LocalBroadcastManager
是支持库的一部分。