📜  Android 传感器教程

📅  最后修改于: 2020-10-11 03:54:11             🧑  作者: Mango

Android传感器教程

传感器可用于监视三维设备的移动或设备环境的变化。

Android提供了传感器api,可与不同类型的传感器一起使用。

传感器类型

Android支持三种类型的传感器:

1)运动传感器

这些用于测量加速力和旋转力以及三个轴。

2)位置传感器

这些用于测量设备的物理位置。

3)环境传感器

这些用于测量环境变化,例如温度,湿度等。

Android传感器API

Android传感器api提供了许多类和接口。传感器api的重要类和接口如下:

1)SensorManager类

android.hardware.SensorManager类提供以下方法:

  • 获取传感器实例,
  • 访问并列出传感器,
  • 注册和取消注册传感器侦听器等

您可以通过调用方法getSystemService()并在其中传递SENSOR_SERVICE常量来获取SensorManager的实例。

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

2)传感器等级

android.hardware.Sensor类提供了获取传感器信息的方法,例如传感器名称,传感器类型,传感器分辨率,传感器类型等。

3)SensorEvent类

其实例由系统创建。它提供有关传感器的信息。

4)SensorEventListener接口

当传感器值(x,y和z)改变或传感器精度改变时,它提供了两种回调方法来获取信息。

Public and abstract methods Description
void onAccuracyChanged(Sensor sensor, int accuracy) it is called when sensor accuracy is changed.
void onSensorChanged(SensorEvent event) it is called when sensor values are changed.

Android简单传感器应用程序示例

让我们看两个传感器示例。

  • 打印x,y和z轴值的传感器示例。在这里,我们将看到这一点。
  • 随机更改设备时更改背景颜色的传感器示例。单击以更改活动传感器示例的背景颜色

activity_main.xml

该文件中只有一个textview。



    


活动课

让我们编写代码来打印x轴,y轴和z轴的值。

package com.example.sensorsimple;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.hardware.Sensor;
import java.util.List;
public class MainActivity extends Activity {
SensorManager sm = null;
TextView textView1 = null;
List list;

SensorEventListener sel = new SensorEventListener(){
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
textView1.setText("x: "+values[0]+"\ny: "+values[1]+"\nz: "+values[2]);
}
};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* Get a SensorManager instance */
        sm = (SensorManager)getSystemService(SENSOR_SERVICE);

        textView1 = (TextView)findViewById(R.id.textView1);

        list = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if(list.size()>0){
        sm.registerListener(sel, (Sensor) list.get(0), SensorManager.SENSOR_DELAY_NORMAL);
        }else{
        Toast.makeText(getBaseContext(), "Error: No Accelerometer.", Toast.LENGTH_LONG).show();
        }
    }

@Override
protected void onStop() {
if(list.size()>0){
  sm.unregisterListener(sel);
}
super.onStop();
}
}

输出:

接下来是什么?