安卓开发传感器的

时间:2021-05-11 09:07:57

传感器

传感器的类型:

加速度传感器

TYPE_ACCELEROMETER

陀螺仪传感器

TYPE_GYROSCOPE

重力传感器

TYPE_GRAVITY

线性加速度传感器

TYPE_LINEAR_ACCELERATTION

温度传感器

TYPE_TEMPERATURE

光标传感器

TYPE_LIGHT

压力传感器

TYPE_PRESSURE

.磁场传感器

TYPE_MAGNETIC_FIELD

所有类

TYPE_ALL

方向传感器

TYPE_ORIEBTATTION

Useage:

 

第一步:

//定义系统系统的sensor(传感器)管理器
   SensorManager sensorManager;

第二步:

在方法:  protected void onCreate(Bundle savedInstanceState)

获取系统传感器管理服务

sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

//定义系统系统的sensor(传感器)管理器
   SensorManager sensorManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText1=findViewById(R.id.edit1);
        //获取系统的传感器管理服务
      sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

第三步:

onResume()这个方法中注册监听器(这个方法需要重写)

registerListener里面有三个参数

registerListener(
                      Listener listener //监听器
                 Sensor sensor ,  //传感器对象  
                  int rate   //传感器的获取数据频率 
                    );

方向传感器

TYPE_ORIEBTATTION

 

@Override
public void onResume(){
        super.onResume();

 //为系统的加速度传感器注册监听器
        sensorManager.registerListener(
                      this,          //监听器
                    sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),  //传感器对象  
                                     SensorManager.SENSOR_DELAY_UI       //传感器的数据频率 
                    );

}

 

 

第四步:为了节省内存,我们需要当程序停止,我们需要注销注册

@Override
public  void onStop() {
        //取消注册
        sensorManager.unregisterListener(this);
    super.onStop();
}
@Override

public  void onPause() {

//取消注册

       sensorManager .unregisterListener( this ) ;
    super .onPause() ;
}

最后一步:

Avtivity事件中需要实现SensorEventListener 这个接口

实现这个接口之后就需要实现2个方法:

//当传感器的值发生改变的时候回调该方法

@Override
public void onSensorChanged(SensorEvent event){}

//当传感器精度改变时回调该方法
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

 

下面给大家展示一下如何使用:(因为要联系到我们不只是用一个传感器所以使用switch来判断传感器的类型(int))

@Override
public void onSensorChanged(SensorEvent event) {

//获取传感器的类型

int sensirType=event.sensor.getType();

StringBuilder sb=null;

float[] values=event.values;

switch (sensirType){
    case Sensor.TYPE_ORIENTATION:
        sb=new StringBuilder();
        //方向传感器
        sb.append("绕Z轴转动的角度:");
        sb.append(values[0]);
        sb.append("\nX轴转动的角度:");
        sb.append(values[1]);
        sb.append("\nY轴转动的角度:");
        sb.append(values[2]);
        editText1.setText(sb.toString());
        break;


总结:

第一步:定义传感器管理

第二步:获取传感器服务

第三步:注册传感器

第四步:注销传感器(暂停的时候)

第五步:获取数据(需要实现接口(SensorEventListener