https://source.android.google.cn/devices/sensors/index.html


传感器

概述

大多数安卓设备都内置了传感器,用来测量移动,方向和各种环境条件

 

Android平台支持以下三类传感器:

  • 这些传感器能够提供精度高且准确的原始数据。
  • 如果要监视三维设备运动或定位,或者监视设备周围的环境变化,那么传感器会极其有用。
  • 例如:游戏可以追踪设备重力感应器的读数来推断复杂的用户手势和动作,比如倾斜,摇晃,旋转或摆动。
  • 同样地,天气应用程序可以使用设备温度传感器和湿度传感器来计算并报告dewpoint,旅行应用程序可以使用地磁传感器和加速计来报告罗盘方位。
  1. 运动传感器:这些传感器测量三个轴的加速力和旋转力。这一类别包括加速度计,重力感应器,陀螺仪和旋转矢量传感器。
  2. 环境传感器:这些传感器测量各种环境参数,例如环境空气温度和压力,照明和湿度。此类别包括了气压计,光度计和温度计。
  3. 位置传感器:这些传感器测量了设备的物理位置。此类别包括方向传感器和磁力计。

Google文档上把传感器类型分为传感器坐标轴、基础传感器和复合传感器(动作传感器、姿势传感器、未校准传感器和互动传感器)

更加具体的可以参考:https://source.android.google.cn/devices/sensors/sensor-types

获取本机支持的传感器

Android传感器框架是android.hardware包的一部分,包含下面的类和接口:

  • SensorManager :你能使用这个类来创建一个传感器服务的实例。这个类提供了各种方法类访问和列举传感器,注册和注销传感器事件监听,并获取相应的信息。这个类也提供了几个传感器的常量,用户报告传感器的精确度,设置数据获取速率,和校准传感器。
  • Sensor :你能使用这个类类创建一个指定传感器的实例。这个类提供了各种方法让你确定传感器的功能。
  • SensorEvent :系统使用这个类来创建一个传感器对象,它提供了关于传感器事件的信息。一个传感器事件包含一下信息:原始传感器数据,这类传感器产生的事件,数据的准确性,和事件的时间戳。
  • SensorEventListener :你能使用这个接口来创建两个回掉方法,当传感器的值改变或者当传感器的精度改变的时候,它接受通知(传感器事件)
        SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

获取本机全部传感器列表

完整代码: 

package com.example.sensor;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.util.List;

public class MainActivity extends AppCompatActivity {

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

        //获取系统传感器管理器
        SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //通过系统传感器管理器..获取本机所有传感器.
        List<Sensor> sensorList = sm.getSensorList(Sensor.TYPE_ALL);

        for(Sensor s :sensorList){
            Log.i("sensorList",s.toString());
        }
    }
}

输出结果如👇 

英语好的话大概翻译一下名字差不多就能判断出是什么类型的传感器了~

获取指定传感器

可以通过下图的代码来获取指定的传感器, 需要选择合适的传感器类型

 

返回一个Sensor对象

        //获取指定的某一个传感器,下面为加速度传感器
        Sensor type_accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if(type_accelerometer!=null){
            Log.i("type_accelerometer",type_accelerometer.toString());
        }

效果如👇