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<Sensor> 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测试效果:

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

(0)

相关推荐

  • android实现手机传感器调用

    android传感器使用的demo,包括光线传感器,加速度传感器,距离传感器和方向传感器. demo:下载地址 源码: package com.bobo.study.study_5_1; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.Se

  • Android实现接近传感器

    本文实例为大家分享了Android实现接近传感器的具体代码,供大家参考,具体内容如下 1.接近传感器检测物体与听筒(手机)的距离,单位是厘米. 一些接近传感器只能返回远和近两个状态,如我的手机魅族E2只能识别到两个距离:0CM(近距离)和5CM(远距离) 因此,接近传感器将最大距离返回远状态,小于最大距离返回近状态. 接近传感器可用于接听电话时自动关闭LCD屏幕以节省电量. 一些芯片集成了接近传感器和光线传感器两者功能(魅族E2). 2.代码如下: MainActivity.class pack

  • Android获取设备传感器的方法

    本文实例为大家分享了Android获取设备传感器的具体代码,供大家参考,具体内容如下 结果示例: xml代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.c

  • Android传感器的简单使用方法

    本文实例为大家分享了Android传感器简单使用的具体代码,供大家参考,具体内容如下 1. SensorManager类 SensorManager类用来管理各个传感器:通过SensorManager创建实例,并用getSystemService(SENSOR_SERVICE)获取传感器服务.使用其getSensorList()方法,可以获取所有可用的传感器该方法返回一个List<Sensor>,即Sensor对象的列表.注意:当不使用或Activity暂停的时候,要关闭感应器:屏幕关闭时,系

  • Android传感器使用实例介绍

    目录 传感器 磁场传感器 加速度传感器 方向传感器 传感器 1.mainActivity 实现SensorEventListerner 方法 2. 定义:SensorManage 对象 3. 在重写的onResum 方法中 为重力和光线传感器注册监听器 sensorManage.registerListener() 4. 在实现的onSensorChanged 方法中 获取传感器的类型 5. 借助硬件 从软件接口上使用光线传感器,根据外界屏幕亮度 修改屏幕亮度 package com.mingr

  • Android光线传感器使用方法详解

    本文实例为大家分享了Android光线传感器使用的具体代码,供大家参考,具体内容如下 一.首先是布局页面activity_light_sensor.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http:/

  • Android采集传感器数据并显示的方法

    本文实例为大家分享了Android采集传感器数据并显示的具体代码,供大家参考,具体内容如下 需要的知识 Android 项目主配置文件 AndroidManifest.xml Android Activity 概念 Android Sensor 接口 Android UI 布局管理器.文本框组件.编辑框组件 代码及解释 1.布局文件,用于控制UI界面显示,这里使用了表格布局管理器和四个行,每一行之中有四列,其中外面的两列是为了让中间两列居中,而中间两列分别是一个显示数据来源的TextView文本

  • Android 如何获取传感器的数据方法详解

    目录 1 传感器简介 2 传感器的使用 2.1 获取传感器服务 2.2 获取待监听的传感器 2.3 注册传感器的监听器 2.4 注销传感器的监听器 3 示例代码 1 传感器简介 传感器 Sensor 是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输.处理.存储.显示.记录和控制等要求. Android 提供了对设备传感器的支持,只要 Android 设备的硬件提供了这些传感器,Android 应用可以通过传感器来获取设备

  • Android传感器数据获取的方法

    本文实例为大家分享了Android传感器数据获取的具体代码,供大家参考,具体内容如下 接着上篇wifi列表获取,我们这篇接着说传感器.还是看代码 我们先自己定义一个传感器的工具类(因为我这边只是获取了部分的传感器,需要获取额外的传感器自己配置一下就行了,工具类通过重载提供了不同的构造方法): public class SensorUtils implements SensorEventListener { private SensorManager manager; /** * @param c

  • Android实现传感器功能

    Android传感器概述:动作传感器.环境传感器.位置传感器等,如方向传感器(电子罗盘).重力传感器(横纵切换).Android SDK支持的传感器并不是每一部Android手机均支持. 动作传感器:在三个轴上测量加速度和旋转角度,包括加速度.重力.陀螺仪: 环境传感器:测量环境参数,包括湿度.光线.温度: 位置传感器:测量设备物理位置,包括方向.磁力. ASF(Android传感器框架)功能:确定当前Android设备内置传感器:确定传感器技术指标,如传感器测量的最大范围.制造商等:获取传感器

  • Android实现计步传感器功能

    本文对原文:android实现计步功能初探,计步项目进行了精简,移除了进程服务和计时.守护进程.数据库保存等等,方便扩展功能. 本文源码:https://github.com/lifegh/StepOrient Android4.4以上版本,有些手机有计步传感器可以直接使用, 而有些手机没有,但有加速度传感器,也可以实现计步功能(需要计算加速度波峰波谷来判断人走一步)! 一.调用 public class MainActivity extends AppCompatActivity implem

  • android实现计步功能初探

    本文主要介绍了android实现计步功能初探,分享给大家,具体如下: 在市面上浏览过众多的计步软件,可惜没有开源的代码,而github上的几个开源的计步代码,要么就是记得不准,要么就是功能不完善,不稳定,于是决心自己写一个,分享给大家使用,希望大家一起来完善. 已上传github:https://github.com/xfmax/BasePedo 注:根据开发者朋友的反馈,普遍要求加入跨天数据清零的操作,故在1.3版本中加入,最新代码在develop分支上,一些新功能也会在这个分支上进行测试,有

  • Android实现计步器功能

    本文实例为大家分享了Android实现计步器功能的具体代码,供大家参考,具体内容如下 计步器的原理是通过手机的前后摆动模拟步伐节奏检测.我们本身在手机的传感器中就有计步器的传感器,所以这里我们直接上代码. activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/r

  • Android 偷拍功能实现(手机关闭依然拍照)详解及实例代码

     Android 偷拍功能/手机关闭能拍照 效果如下: 其实偷拍与偷录实现方式是一样的,都是使用到的WindowManager来绘制桌面小控件的原理.那我就不多说了- 一.首先我们需要一个SurfaceView: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.

  • Android 获取传感器列表整理及简单实例

    Android 获取传感器列表整理及简单实例 Android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于设备X.Y.Z轴上的加速度 传感器类型值(Sensor Type):1 (0x00000001) TYPE_AMBIENT_TEMPERATURE 温度传感器,单位是℃ 传感器类型值(Sensor Type): 13 (0x0000000d) TYPE_GAME_ROTATION_VECTOR 游戏动作传感器,不收

  • Android登录注册功能 数据库SQLite验证

    本文实例为大家分享了Android登录注册功能的具体代码,供大家参考,具体内容如下 展示效果 代码区 MainActivity(登录方法) public class MainActivity extends AppCompatActivity { @BindView(R.id.editText) EditText editText; @BindView(R.id.editText2) EditText editText2; @BindView(R.id.button) Button button

  • Android实现搜索功能并本地保存搜索历史记录

    本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

  • Android ActionBar搜索功能用法详解

    本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意点: 首先要吐槽一下Android的官方Guide文档 ,关于用法讲得不明确,可能是一直没更新的原因吧. 本来照着文档搞了一下,hint死活出不来,也无法跳转到搜索结果Activity. StackOverflow也有人提出了这个问题,答案说得很明白 - 参考链接. 正确用法 1. 在AndroidManifest.xml中为提供SearchView

随机推荐