在Android中使用传感器数据

时间:2014-06-24 22:50:48

标签: android android-sensors

所以我正在开发一个我希望获得环境温度和湿度的应用程序。离开开发者网站我得出了这个:

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.我想要onAccuracyChangedonSensorChanged到底做什么(如果有的话)?我想在按下按钮后获得温度,我只需要它的实例,我不需要注意到正在进行的更改。 2.我究竟如何将温度值传递到我的Main Activity?我必须使用捆绑吗?

2 个答案:

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

                }

            });

希望这有帮助!