当前位置:主页 > android教程 > Android传感器功能

Android实现传感器功能

发布:2023-03-11 18:00:01 59


给网友朋友们带来一篇相关的编程文章,网友许浩然根据主题投稿了本篇教程内容,涉及到Android、传感器、Android传感器功能相关内容,已被108网友关注,涉猎到的知识点内容可以在下方电子书获得。

Android传感器功能

Android传感器概述:动作传感器、环境传感器、位置传感器等,如方向传感器(电子罗盘)、重力传感器(横纵切换)。Android SDK支持的传感器并不是每一部Android手机均支持。

动作传感器:在三个轴上测量加速度和旋转角度,包括加速度、重力、陀螺仪;

环境传感器:测量环境参数,包括湿度、光线、温度;

位置传感器:测量设备物理位置,包括方向、磁力。

ASF(Android传感器框架)功能:确定当前Android设备内置传感器;确定传感器技术指标,如传感器测量的最大范围、制造商等;获取传感器回传数据,以及定义回传数据的精度;注册和注销传感器事件监听器,用于监听数据回传。

硬件传感器:加速、温度、陀螺仪、光线、磁场、重力(视情况而定)、线性加速(视情况而定)、湿度、压力、临近、旋转向量

软件传感器:方向。

SensorManager类:创建sensor service实例。访问、枚举、注册、注销监听器、精度、频率等。

Sensor类:提供获取传感器参数。

SensorEvent类:创建传感器事件对象,该对象提供与传感器有关信息,事件对象包括的信息有原始传感器回传数据、类型、精度以及触发事件。

SensorEventListener接口:包含两个回调方法,当传感器回传值或精度发生变化时,系统调用这两个方法。

动作传感器(Motion):监听设备动作的传感器有5个,加速、陀螺仪纯硬件传感器,重力、线性加速、旋转。监测Android手机的动作,如倾斜、震动等。设备的移动通常是对用户输入的直接反应,如游戏中控制小球;设备所处物理环境也会反应在设备的动作上,如手机放在车上。所有动作传感器均会返回3个浮点数值(长度为3的数组)。

重力Demo:设备从左到右推动,X轴加速度为正值;反向Y轴加速度为正值,若向上以Am/s方加速度推动,则Z轴加速度为A+9.81,若计算实际加速度,需要减9.81。

位置传感器:磁场、方向传感器,邻近传感器(测量设备正面到某一个邻近物体的距离)。对于确定设备在真实世界中的物理位置非常有用。前两者返回三个值,邻近返回一个值。

方向传感器:

SensorEvent.values[0]:绕着Z轴旋转的角度。若Y轴正对北方(正常拿手机方向),该值为0,反之,为南,该值180,Y轴指向东方,该值90,反之270。

SensorEvent.values[1]:绕着X轴旋转的角度,当从Z轴正方向朝Y轴正方向,该值为正值,反之,为负值,该值在-180到180中间变动。

SensorEvent.values[2]:绕着Y轴旋转的角度。当从Z轴正方向朝X轴正方向,该值为正值,反之,为负值,该值在-180到180中间变动。

邻近传感器:SensorEvent.values[0]:手机正面距离邻近物体的距离(CM)。

环境传感器:Android提供了4个传感器检测外部环境,如湿度、温度、压强、光线,并不是所有传感器均有,需要提前判断。环境传感器只返回一个值。

TYPE_AMBIENT_TEMPERATURE:event.values[0]  ℃  温度

TYPE_LIGHT:event.values[0]  lx  光线

TYPE_PRESSURE:event.values[0]  hPa  压强

TYPE_RELATIVE_HUMIDITY:event.values[0]  RH(%)  湿度

一、获得当前设备所有的传感器列表

import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.List;
 
public class MainActivity extends AppCompatActivity {
    private TextView tvSensor;
    private SensorManager sensorManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvSensor = (TextView) findViewById(R.id.tvSensor);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
        for (Sensor sensor:sensors){
            tvSensor.append(sensor.getName()+"\n");
        }
    }
}

二、动作传感器示例

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private TextView tvAccelerometer;
    private SensorManager sensorManager;
    private float[] gravity = new float[3];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
 
    @Override
    public void onSensorChanged(SensorEvent event) {
        switch (event.sensor.getType()){
            case Sensor.TYPE_ACCELEROMETER:
                final float alpha = (float)0.8;
                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];
                String accelerometer = "加速度\n"+"X:"+(event.values[0]-gravity[0])+"\n"+"Y:"+
                        (event.values[1]-gravity[1])+"\n"+"Z:"+(event.values[2]-gravity[2]);
                Log.d("Z",String.valueOf((event.values[2]-gravity[2])));
                tvAccelerometer.setText(accelerometer);
                break;
            case Sensor.TYPE_GRAVITY:
                gravity[0] = event.values[0];
                gravity[1] = event.values[1];
                gravity[2] = event.values[2];
                break;
            case Sensor.TYPE_PROXIMITY:
                setTitle(String.valueOf(event.values[0]));
            default:
                break;
        }
    }
 
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
    protected void onResume(){
        super.onResume();
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_UI);
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
                SensorManager.SENSOR_DELAY_FASTEST);
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
                SensorManager.SENSOR_DELAY_NORMAL);
    }
    protected void onPause(){
        super.onPause();
        sensorManager.unregisterListener(this);
    }
}

以下是小米2s测试效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


参考资料

相关文章

  • Android开发OkHttp执行流程源码分析

    发布:2023-03-04

    这篇文章主要为大家介绍了Android开发OkHttp执行流程源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Android Studio调试Gradle插件详情

    发布:2023-03-05

    这篇文章主要介绍了Android Studio调试Gradle插件详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下


  • Android编辑框EditText与焦点变更监视器及文本变化监视器实现流程详解

    发布:2023-03-13

    这篇文章主要介绍了Android编辑框EditText与焦点变更监视器及文本变化监视器实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧


  • Android学习笔记之蓝牙功能

    发布:2023-03-12

    这篇文章主要为大家详细介绍了Android学习笔记之蓝牙功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Android边播放边缓存视频框架AndroidVideoCache详解

    发布:2023-03-07

    这篇文章主要为大家介绍了Android边播放边缓存视频框架AndroidVideoCache详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Android中FileProvider的各种场景应用详解

    发布:2023-03-05

    这篇文章主要为大家介绍了Android中FileProvider的各种场景应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Android LeakCanary的使用方法介绍

    发布:2023-03-06

    在Android的性能优化中,内存优化是必不可少的点,而内存优化最重要的一点就是解决内存泄漏的问题,在Android的内存泄漏分析工具也不少,比如PC端的有:AndroidStudio自带的Android Profiler、MAT等工具;手机端也有,就是我们今天要介绍的LeakCanary


  • Android AndFix热修复原理详情

    发布:2023-03-03

    这篇文章主要介绍了Android AndFix热修复原理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值吗,需要的小伙伴可以参考一下


网友讨论