Android 传感器(Sensor)API教程 (三) 传感器值取得例程及处理流程

来源:互联网 发布:linux 命令行 用户名 编辑:程序博客网 时间:2024/05/21 12:42

原帖地址: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方法中接触所有登录的监听器。
传感器值取得例程 说明
您需要登录才可以下载或查看附件
文件名称
AndroidEgg SensorGetValue.zip 
文件大小
43.3 KB
文件格式
zip
下载

AndroidEgg SensorGetValue.zip



原创粉丝点击