原帖地址:http://www.androidegg.com/portal.php?mod=view&aid=594
1.3.6 传感器的值取得及例程 传感器值取得需要通过SensorManager#registerListener方法对加载SensorEventListener接口的对象进行登录处理。从登录监听器开始到传感器的值取得的动作处理过程如图1-2 那样所示。在程序列表1-2 中的传感器的值取得,画面处理结果(图1-3 )所示。
图1-3 传感器值取得例程运行结果
程序列表1-2 传感器的值取得画面输出例程
package androidegg.stu.sensor; import java.util.List; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class AndroidEggSensorGetValueActivity extends Activity implements SensorEventListener{ //...① /** Called when the activity is first created. */ private SensorManager sensorManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //SensorManager的接口取得 sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); setContentView(R.layout.main); } @Override protected void onResume(){ //...② super.onResume(); List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); //sensor1 for (Sensor s : sensors){ sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL); } } // @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent e) { //...③ // TODO Auto-generated method stub switch(e.sensor.getType()){ //加速度的值表示 case Sensor.TYPE_ACCELEROMETER:{ TextView x = (TextView)findViewById(R.id.x); x.setText("x:" + String.valueOf(e.values[SensorManager.DATA_X])); TextView y = (TextView)findViewById(R.id.y); y.setText("y:" + String.valueOf(e.values[SensorManager.DATA_Y])); TextView z =(TextView)findViewById(R.id.z); z.setText("z:" + String.valueOf(e.values[SensorManager.DATA_Z])); break; } //倾斜度的值表示 case Sensor.TYPE_ORIENTATION:{ TextView x = (TextView)findViewById(R.id.Azimuth); x.setText("Azimuth" + String.valueOf(e.values[SensorManager.DATA_X])); TextView y = (TextView)findViewById(R.id.Pitch); y.setText("Pitch:" + String.valueOf(e.values[SensorManager.DATA_Y])); TextView z = (TextView)findViewById(R.id.Roll); z.setText("Roll:" + String.valueOf(e.values[SensorManager.DATA_Z])); break; } //磁力计 的值表示 case Sensor.TYPE_MAGNETIC_FIELD:{ TextView x = (TextView)findViewById(R.id.magnetic_x); x.setText("x:" + String.valueOf(e.values[SensorManager.DATA_X])); TextView y = (TextView)findViewById(R.id.magnetic_y); y.setText("y:" + String.valueOf(e.values[SensorManager.DATA_Y])); TextView z= (TextView)findViewById(R.id.magnetic_z); z.setText("z:" + String.valueOf(e.values[SensorManager.DATA_Z])); break; } //温度計の値を表示する case Sensor.TYPE_TEMPERATURE:{ TextView x = (TextView)findViewById(R.id.degree); x.setText("Degree:" + String.valueOf(e.values[SensorManager.DATA_X])); } } } // @Override protected void onStop(){ super.onStop(); //...④ sensorManager.unregisterListener(this); } }
重要事项如下所示 ① 为了取得传感器的值,需要加载SensorEventListener ② 在onResume方法进行监听器的登录 ③ 在onSensorChanged方法中取得传感器的值,并在画面表示。 在这个方法中在onResume方法中登录的所有种类的传感器的值都可以取道。判别传感器的种类,将传感器的值用 TextView在画面表示出来。 ④ 在onStop方法中接触所有登录的监听器。