所以我正在开发一个我希望获得环境温度和湿度的应用程序。离开开发者网站我得出了这个:
public class TempSensorActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mTemp;
@Override
public final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp_sensor);
// Get an instance of the sensor service, and use that to get an instance of
// a particular sensor.
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mTemp = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
@Override
public void onSensorChanged(SensorEvent event) {
float degreesCelsius = event.values[0];
// Do something with this sensor data.
}
@Override
protected void onResume() {
// Register a listener for the sensor.
super.onResume();
mSensorManager.registerListener(this, mTemp, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause();
mSensorManager.unregisterListener(this);
}
}
现在我查看了文档,我想知道1.我想要onAccuracyChanged
和onSensorChanged
到底做什么(如果有的话)?我想在按下按钮后获得温度,我只需要它的实例,我不需要注意到正在进行的更改。 2.我究竟如何将温度值传递到我的Main Activity
?我必须使用捆绑吗?
答案 0 :(得分:0)
按照建议here,您必须在活动中注册监听器,并在按钮onClick中取消注册。然后从onClick中的活动中访问值,以便在按钮单击时执行您想要的操作。在这里,我将这些值发送到AnOtherActivity.Class。
btnClick.setOnClickListener(new OnClickListnener() ) {
void OnClick(View v){
//unregister the receiver...
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sensorManager.unregisterListener(listener);
// access values and send to AnOtherActivity
Intent i = new Intent(MyActivity.this, AnOtherActivity.class);
i.putExtra("DegreeCelsius", degreesCelsius);
startActivity(i);
}
}, theTimeInMilliseconds);
}
}
答案 1 :(得分:0)
1)如果你需要使用onAccuracyChanged
,你就会知道。它用于检测传感器的精度是否已经改变,因此它实际上取决于您对传感器的使用情况。在大多数情况下,可能没有用处。
2)onSensorChanged
- 在这里您可以获得从传感器更新的读数,换句话说 - 您可以在这里完成从正在使用的传感器中检索到的值的大部分工作
3)我认为没有理由在你的Sensor
中使用MainActivity
方法 - 我自己这样做了,而且它运行得很完美。
4)如果只在单击按钮时需要获取临时读数,在onClick
方法中我会注册监听器,获取读数,然后取消注册监听器,这样就不会“浪费”资源。像这样的东西:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mSensorManager.registerListener(Mainactivity.this, mTemp, SensorManager.SENSOR_DELAY_NORMAL);
//declare degreeCelsius as global variable in your Activity
degreesCelsius = event.values[0];
//Do whatever you want with the value
mSensorManager.unregisterListener(Mainactivity.this);
}
});
希望这有帮助!