Android中的传感器(总)

现在手机有好多的功能都是由传感器完成的,比如手机可以自动调节屏幕亮度(光线传感器),手机摇一摇功能(加速度传感器)。但是你知道Android中的传感器都有哪些吗?

据Android官方显示,Android传感器可以分为三大类

Android平台支持三大类传感器:

  • 运动传感器

    这些传感器测量沿三个轴的加速力和旋转力。此类别包括加速度计,重力传感器,陀螺仪和旋转矢量传感器。

  • 环境传感器

    这些传感器测量各种环境参数,例如环境空气温度和压力,照度和湿度。此类别包括气压计,光度计和温度计。

  • 位置传感器

    这些传感器测量设备的物理位置。此类别包括方向传感器和磁力计。

目前智能手机支持的常用的传感器

传感器 Java中的名称 本地接口名称 数值
加速度传感器 TYPE_ACCELEROMETER                 SENSOR_TYPE_ACCELEROMETER   1
磁场传感器 TYPE_MAGNETIC_FIELD SENSOR_TYPE_MAGNETIC_FIELD  2
方向传感器 TYPE_ORIENTATION SENSOR_TYPE_ORIENTATION  3
陀螺仪传感器 TYPE_GYROSCOPE SENSOR_TYPE_GYROSCOPE   4
光线传感器 TYPE_LIGHT SENSOR_TYPE_LIGHT  5
压力传感器 TYPE_PRESSURE SENSOR_TYPE_PRESSURE     6
温度传感器 TYPE_AMBIENT_TEMPERATURE SENSOR_TYPE_TEMPERATURE 7
距离传感器 TYPE_PROXIMITY SENSOR_TYPE_PROXIMITY    8

下面接着说三大类型的传感器

第一种:运动传感器

传感器的可能架构因传感器类型而异:

  • 重力,线性加速度,旋转矢量,有效运动,步进计数器和步进检测器传感器是基于硬件或基于软件的。
  • 加速度传感器和陀螺仪传感器始终基于硬件。

第二种:环境传感器

Android平台为环境传感器提供了四个传感器,可让您监视各种环境属性。您可以使用这些传感器来监视Android设备附近的相对环境湿度,照度,环境压力和环境温度。所有四个环境传感器均基于硬件,并且仅在设备制造商将其内置到设备中后才可用。

第三种:距离传感器

Android平台为距离传感器提供了两个传感器,可让您确定设备的位置:地磁场传感器和加速度计。Android平台还提供了一个传感器,可让您确定设备的面部与物体之间的距离(称为接近传感器)。地磁场传感器和接近传感器是基于硬件的。大多数手机和平板电脑制造商都包含地磁场传感器。同样,手机制造商通常会包含一个接近传感器,以确定何时将手机握在靠近用户面部的位置(例如,在通话期间)。为了确定设备的方向,您可以使用设备的加速度计和地磁场传感器的读数。

介绍完毕就开始使用

传感器框架

类/接口 介绍说明
SensorManager 您可以使用此类创建传感器服务的实例。此类提供了用于访问和列出传感器,注册和注销传感器事件侦听器以及获取方向信息的各种方法。此类还提供了几个传感器常数,用于报告传感器精度,设置数据采集速率和校准传感器。
Sensor 您可以使用此类创建特定传感器的实例。此类提供了各种方法,可让您确定传感器的功能。
SensorEvent 系统使用此类创建传感器事件对象,该对象提供有关传感器事件的信息。传感器事件对象包括以下信息:原始传感器数据,生成事件的传感器类型,数据的准确性以及事件的时间戳。
SensorEventListener 您可以使用此接口创建两个回调方法,以在传感器值更改或传感器精度更改时接收通知(传感器事件)。

获取传感器管理者对象

// 获取传感器管理者对象
SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

获取指定的传感器对象

//获取全部的传感器
List list = sensorManager.getSensorList(Sensor.TYPE_ALL);
// 获取指定的传感器
Sensor sensor = mSensorManager.getDefaultSensor(int type);
//例:获取加速度传感器
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

解除注册

//解除注册--不要忘记了,把它加在合适的地方
sensorManager.unregisterListener(this,sensor);

获取传感器完整代码

public class SensorActivity extends AppCompatActivity {

    private SensorManager sensorManager;
    private List<Sensor> list;
    private Button mGetSensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sensor);
        mGetSensor = findViewById(R.id.get_sensor);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        list = sensorManager.getSensorList(Sensor.TYPE_ALL);
        mGetSensor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSensor();
            }
        });
    }

    public void setSensor() {
        Log.d("传感器:", "一共有" + list.size() + "个传感器");
        for (int i = 0; i < list.size(); i++) {
            String sensortext = "对应的type" + list.get(i).getType()
                    + "  设备名称:" + list.get(i).getName()
                    + "  设备版本:" + list.get(i).getVersion()
                    + "  供应商:" + list.get(i).getVendor();
            switch (list.get(i).getType()) {
                case Sensor.TYPE_ACCELEROMETER:
                    Log.d("传感器:", "加速度传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_GYROSCOPE:
                    Log.d("传感器:", "陀螺仪传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_LIGHT:
                    Log.d("传感器:", "环境光线传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_MAGNETIC_FIELD:
                    Log.d("传感器:", "电磁场传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_ORIENTATION:
                    Log.d("传感器:", "方向传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_PRESSURE:
                    Log.d("传感器:", "压力传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_PROXIMITY:
                    Log.d("传感器:", "距离传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_TEMPERATURE:
                    Log.d("传感器:", "温度传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_GRAVITY:
                    Log.d("传感器:", "重力传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_LINEAR_ACCELERATION:
                    Log.d("传感器:", "线性加速度传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_ROTATION_VECTOR:
                    Log.d("传感器:", "旋转矢量传感器-->" + sensortext);
                    break;
                case Sensor.TYPE_RELATIVE_HUMIDITY:
                    Log.d("传感器:", "周围环境相对湿度传感器-->" + sensortext);
                    break;
            }
        }
    }
}

详细的各种传感器使用的方法以后再接着聊

传送门

Android中的传感器之---加速度传感器

Android中的传感器之---磁场传感器

Android中的传感器之---光线传感器

Android中的传感器之---温度传感器

猜你喜欢

转载自blog.csdn.net/lanrenxiaowen/article/details/108051656
今日推荐