美文网首页
Android手机传感器的简单介绍

Android手机传感器的简单介绍

作者: 破荒之恋 | 来源:发表于2017-07-10 14:57 被阅读317次

Android手机传感器的使用

1、传感器的分类

  • 动作传感器:加速度传感器、重力传感器、陀螺仪等
  • 位置传感器:方向传感器、磁力传感器
  • 环境传感器:温度传感器、压力传感器、亮度传感器

2、使用传感器的方法

1、获取SensorManager对象

2、执行SensorManager对象的getDefaultSeneor()方法获取Sensor对象

3、获取Sensor对象的各种属性

获取手机所有的传感器名称
 SensorManager  sensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);
 List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
 for (Sensor sensor:sensorList){
      Log.i(TAG, "--onClick: "+sensor.getName());
 }
//获取指定类型的传感器
  Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
  String name = lightSensor.getName();
  Log.i(TAG, "-----name: "+name);
传感器的采样率

采样率越低越好;

设置传感器原则:尽量使用比较低的传感器采样率,这样就可以使系统负荷最小,同时可以省电。

SENSOR_DELAY_NOMAL(200000微秒)//系统负荷最低,但是传感器反应最慢。
SENSOR_DELAY_UI(60000微秒)
SENSOR_DELAY_GAME(20000微秒)
SENSOR_DELAY_FASTEST(0微秒)//精确度最高
传感器的属性
  • 传感器名称:
  • 传感器制造商:
  • 传感器功率:
  • 传感器的resulotion:
 lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    sensorManager.registerListener(new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {

            String sensorName = event.sensor.getName();
            String sensorVendor = event.sensor.getVendor();
            float resolution = event.sensor.getResolution();
            float power = event.sensor.getPower();
            long timestamp = event.timestamp;

            Log.i(TAG, "sensorName: "+sensorName);
            Log.i(TAG, "sensorVendor: "+sensorVendor);
            Log.i(TAG, "resolution: "+resolution);
            Log.i(TAG, "power: "+power);
            Log.i(TAG, "timestamp: "+timestamp);//时间
            int type = event.sensor.getType();


        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    },lightSensor,SensorManager.SENSOR_DELAY_GAME);
传感器加速度的计算方法
手机三维坐标系统
获取手机加速度的值
加速度值的过滤
private float gravity[]=new float[3];
private float linear_acceleration[]=new float[3];

    taoSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {

           /* float value0 = event.values[0];//x坐标
            float value1 = event.values[1];//y坐标
            float value2 = event.values[2];//z坐标
            Log.i(TAG, "--onSensorChanged: "+value0);
            Log.i(TAG, "--onSensorChanged: "+value1);
            Log.i(TAG, "--onSensorChanged: "+value2);*/

           float alpha=0.8f;
            gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0];
            gravity[1]=alpha*gravity[1]+(1-alpha)*event.values[1];
            gravity[2]=alpha*gravity[2]+(1-alpha)*event.values[2];

            linear_acceleration[0]=event.values[0]-gravity[0];
            linear_acceleration[1]=event.values[1]-gravity[1];
            linear_acceleration[2]=event.values[2]-gravity[2];

            Log.i(TAG, "----x-加速度---onSensorChanged: "+linear_acceleration[0]);
            Log.i(TAG, "----y--加速度---onSensorChanged: "+linear_acceleration[1]);
            Log.i(TAG, "----z--加速度---onSensorChanged: "+linear_acceleration[2]);


        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    },taoSensor,SensorManager.SENSOR_DELAY_NORMAL);
方向传感器的作用

通过方向传感器可以获取设备与地球磁场北极之间的夹角:

1、Azimuth:设备围绕Z轴旋转的角度,y轴与地磁北极之间的夹角,取值范围在0至360度之间;

2、Pitch:设备围绕X轴旋转的角度。当Z轴向y轴的正方向旋转时,该值为正数,反之则为负数,取值范围在-180至180度之间。

3、Roll:设备围绕y轴旋转的角度,当z轴向x轴正方向旋转时,该值为正数,反之则为负数,取值范围在-90至90之间;

距离传感器的作用

判断设备与用户的脑袋之间的距离,实现接口SensorEventListener

sensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);
 mProximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

@Override
public void onSensorChanged(SensorEvent event) {
    float disatce = event.values[0];
    Log.i(TAG, "----disatce---: "+disatce);
    Log.i(TAG, "----disatce---: "+mProximity.getMaximumRange());
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

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

    sensorManager.registerListener(this,mProximity,SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
}

相关文章

  • Android手机传感器的简单介绍

    Android手机传感器的使用 1、传感器的分类 动作传感器:加速度传感器、重力传感器、陀螺仪等位置传感器:方向传...

  • Android传感器应用开发

    Android传感器应用开发 Android系统提供了对传感器的支持,如果手机设备的硬件提供了这些传感器,Andr...

  • Android开发高级进阶——传感器

    Android系统提供了对传感器的支持,如果手机设备的硬件提供了这些传感器,Android应用可以通过传感器来获取...

  • Android的传感器开发

    在Android系统中开发传感器应用十分简单,因为Android系统为传感器支持提供了强大的管理服务,同样传感器的...

  • 传感器实现仿微信摇一摇功能

    导语 如今Android手机中,硬件中内嵌了很多传感器(比如加速度传感器,重力传感器,陀螺仪传感器,方向传感器,压...

  • Android传感器之摇一摇音乐播放(一)

    Leo今天主要给大家介绍了如何简单使用Android系统传感器,实现摇一摇播放音乐,以及检测当前温度,算是入...

  • 054Android操作系统11种传感器介绍

    Android操作系统11种传感器介绍在Android2.3 gingerbread系统中,google提供了11...

  • Android手机红外开发—点击和长按事件

    上一篇文章《红外技术及Android手机红外遥控器开发》中简单介绍了红外遥控技术和Android 手机红外遥控开发...

  • Android传感器

    一.Android的三大类传感器 Android传感器按大方向划分大致有这么三类传感器:动作(Motion)传感器...

  • 传感器

    一.Android的三大类传感器 Android传感器按大方向划分大致有三类传感器:动作(Motion)传感器、环...

网友评论

      本文标题:Android手机传感器的简单介绍

      本文链接:https://www.haomeiwen.com/subject/gcayhxtx.html