Android传感器的简单使用方法

本文实例为大家分享了Android传感器简单使用的具体代码,供大家参考,具体内容如下

1. SensorManager类

SensorManager类用来管理各个传感器:通过SensorManager创建实例,并用getSystemService(SENSOR_SERVICE)获取传感器服务。
使用其getSensorList()方法,可以获取所有可用的传感器该方法返回一个List<Sensor>,即Sensor对象的列表。
注意:当不使用或Activity暂停的时候,要关闭感应器:屏幕关闭时,系统不会自动关闭感应器,这会导致耗电增加,关闭的方法,就是解除对传感器的监听。

2. Sensor类

Sensor实例对应一个具体的传感器,通过判断Sensor的类型,来处理器传感器信息,类型如下:
方向传感器(Orientation sensor):SENSOR_TYPE_ORIENTATION
加速感应器(Accelerometer sensor):SENSOR_TYPE_ACCELEROMETER
陀螺仪传感器(Gyroscope sensor):SENSOR_TYPE_GYROSCOPE
磁场传感器(Magnetic field sensor):SENSOR_TYPE_MAGNETIC_FIELD
接近(距离)感应器(Proximity sensor):SENSOR_TYPE_PROXIMITY
光线传感器(Light sensor):SENSOR_TYPE_LIGHT
气压传感器(Pressure sensor):SENSOR_TYPE_PRESSURE
温度传感器(Temperature sensor): SENSOR_TYPE_TEMPERATURE
重力感应器(Gravity sensor,Android 2.3引入):SENSOR_TYPE_GRAVITY
线性加速感应器(Linear acceleration sensor ,Android 2.3引入):SENSOR_TYPE_LINEAR_ACCELERATION
旋转矢量传感器(Rotation vector sensor,Android 2.3引入): SENSOR_TYPE_ROTATION_VECTOR
相对湿度传感器(Relative humidity sensor,Android 4.0引入)
近场通信(NFC)传感器(Android 2.3引入),NFC和其他不一样,具有读写功能。

3. SensorEventListener 监听器

使用SensorEventListener可以监听传感器的各种事件,主要使用onSensorChanged()事件来获取传感器的信息。
onSensorChanged()事件的参数为SensorEvent对象,SensorEvent包含以下信息:
· 传感器类型: Sensor sensor
· 传感器数值精度:int accuracy
· 传感器具体值:float[ ] values
通过访问SensorEvent中的信息来获取具体数值。

4. 使用传感器的步骤

· 1. 定义SensorManager,并获取SensorManager实例;
· 2. 定义Sensor,并指定传感器;
· 3. 为定义的传感器注册事件监听事件:sensorManager.registerListener(三个参数),三个参数分别为:SensorEventListener、Sensor、更新速率;
· 4. 创建SensorEventListener监听器,获取传感器的值;
· 5. 退出应用时,应注销传感器事件的监听:sensorManager.unregisterListener(Sensor sensor)。

☆☆☆Android Studio实现在加速度传感器的使用

1.打开Android Studio,新建工程后,在activity_main.xml中界添加一个按钮和三个TextView。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lession.example.com.androidlession616.MainActivity">
    
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <Button
            android:text="使用三轴加速度感应器(重力)"
            android:layout_width="356dp"
            android:layout_height="wrap_content"
            android:id="@+id/button"
            android:textColor="@android:color/holo_red_dark"
            android:textSize="20sp" />
            
        <TextView
            android:text="TextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button"
            android:id="@+id/textView"
            android:textColor="@android:color/holo_green_dark"
            android:textSize="20sp" />
            
        <TextView
            android:text="TextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView2"
            android:textColor="@android:color/holo_green_dark"
            android:textSize="20sp" />
            
        <TextView
            android:text="TextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView3"
            android:textColor="@android:color/holo_green_dark"
            android:textSize="20sp" />
            
    </LinearLayout>
    
</RelativeLayout>

2.在MainActivity中,编写代码。

package lession.example.com.androidlession616;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView tv1,tv2,tv3;
    private float x, y, z;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button) findViewById(R.id.button);
        tv1 = (TextView) findViewById(R.id.textView);
        tv2 = (TextView) findViewById(R.id.textView2);
        tv3 = (TextView) findViewById(R.id.textView3);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过服务得到传感器管理对象
                SensorManager sensorMgr = (SensorManager)
                        getSystemService(SENSOR_SERVICE);
                //得到重力传感器实例
                //TYPE_ACCELEROMETER 加速度传感器(重力传感器)类型。
                //TYPE_ALL 描述所有类型的传感器。
                //TYPE_GYROSCOPE 陀螺仪传感器类型
                //TYPE_LIGHT 光传感器类型
                //TYPE_MAGNETIC_FIELD 恒定磁场传感器类型。
                //TYPE_ORIENTATION 方向传感器类型。
                //TYPE_PRESSURE 描述一个恒定的压力传感器类型
                //TYPE_PROXIMITY 常量描述型接近传感器
                //TYPE_TEMPERATURE 温度传感器类型描述
                final Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                SensorEventListener lsn = new SensorEventListener() {
                    @SuppressWarnings("deprecation")//表示不检测过期的方法
                    //传感器获取值改变时响应此函数
                    public void onSensorChanged(SensorEvent e) {
                        x = e.values[0];
                        y = e.values[1];
                        z = e.values[2];
//                        x = e.values[SensorManager.DATA_X];
//                        y = e.values[SensorManager.DATA_Y];
//                        z = e.values[SensorManager.DATA_Z];
                        tv1.setText("x=" + x );//手机水平放置,左右x值
                        tv2.setText("y=" + y );//手机水平放置,前后y值
                        tv3.setText("z=" + z );//手机竖直放置,上下z值
                    }
                    public void onAccuracyChanged(Sensor s, int accuracy) {
                    }
                };
                //注册listener,第三个参数是检测的精确度
                sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
            }
        });
    }
}

运行结果:

☆☆☆Android Studio实现在光线传感器的使用

1.打开Android Studio,新建工程后,在activity_main.xml中界添加一个按钮和一个TextView。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lession.example.com.androidlession616_2.MainActivity">
    
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <Button
            android:text="光照强度"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button"
            android:textColor="@android:color/holo_red_dark"
            android:textSize="20sp" />
            
        <TextView
            android:text="TextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView"
            android:textColor="@android:color/holo_green_dark"
            android:textSize="20sp" />
            
    </LinearLayout>
    
</RelativeLayout>

2.在MainActivity中,编写代码。

package lession.example.com.androidlession616_2;

import android.content.Context;
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.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView tv = (TextView) findViewById(R.id.textView);
        Button bt = (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SensorManager mSManager = (SensorManager)
                        getSystemService(Context.SENSOR_SERVICE);
                Sensor mSen = mSManager.getDefaultSensor(Sensor.TYPE_LIGHT);
                SensorEventListener mSEListener = new SensorEventListener() {
                    @Override
                    public void onSensorChanged(SensorEvent event) {
                        tv.setText("光照强度为:\n"+event.values[0]+"勒克斯");
                    }
                    @Override
                    public void onAccuracyChanged(Sensor sensor, int accuracy) {
                    }
                };
                mSManager.registerListener(mSEListener,mSen,SensorManager.SENSOR_DELAY_NORMAL);
            }
        });
    }
}

运行结果:

这就是传感器的简单使用。

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

(0)

相关推荐

  • Android开发中方向传感器定义与用法详解【附指南针实现方法】

    本文实例讲述了Android开发中方向传感器定义与用法.分享给大家供大家参考,具体如下: Android中的方向传感器在生活中是一个很好的应用,典型的例子是指南针的使用,我们先来简单介绍一下传感器中三个参数x,y,z的含义,以一幅图来说明. 补充说明:图中的坐标轴x,y,z和传感器中的X,Y,Z没有任何联系! 如上图所示,绿色部分表示一个手机,带有小圈那一头是手机头部 传感器中的X:如上图所示,规定X正半轴为北,手机头部指向OF方向,此时X的值为0,如果手机头部指向OG方向,此时X值为90,指向

  • Android开发中的重力传感器用法实例详解

    本文实例讲述了Android开发中的重力传感器用法.分享给大家供大家参考,具体如下: 重力传感器与方向传感器的开发步骤类似,只要理清了期中的x,y,z的值之后就可以根据他们的变化来进行编程了,首先来看一副图 假设当地的重力加速度值为g 当手机正面朝上的时候,z的值为q,反面朝上的时候,z的值为-g 当手机右侧面朝上的时候,x的值为g,右侧面朝上的时候,x的值为-g 当手机上侧面朝上的时候,y的值为g,右侧面朝上的时候,y的值为-g 了解了重力传感器中X,Y,Z的含义之后下面我们就开始学习如何使用

  • Android利用Sensor(传感器)实现水平仪功能

    这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端. 利用方向传感器返回的第一个参数,实现了一个指南针小应用. 我的Android进阶之旅------>Android利用Sensor(传感器)实现指南针功能 接下来,我们利用返回的第二.三个参数实现该水平仪.因为第二个参数,反映底部翘起的角度(当顶部翘起时为负值),第三个参数可以反映右侧翘起的角度(当左侧翘起时为负值).根据这两个角度就可以开发水平仪,实现手机哪端翘起

  • Android实现计步传感器功能

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

  • Android利用方向传感器获得手机的相对角度实例说明

    1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始沿着屏幕的的垂直方向指向屏幕的顶端. 将手机放在桌子上,z轴的方向是从手机指向天空. 2.方向传感器 在方向传感器中values变量的3个值都表示度数,它们的含义如下: values[0]:该值表示方位,也就是手机绕着Z轴旋转的角度.0表示北(North):90表示东(East):180表示南(Sou

  • android 传感器(OnSensorChanged)使用介绍

    下面是API中定义的几个代表sensor的常量. Int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. 加速度传感器 int TYPE_ALL A constant describing all sensor types. 所有类型 A constant describing all sensor types. int TYPE_GRAVITY A constant describing a grav

  • Android利用Sensor(传感器)实现指南针小功能

    首先来说一说该指南针的实现思路: 程序先准备一张指南针图片,该图片上方向指针指向北方.接下来开发一个检测方向的传感器,程序检测到手机顶部绕Z轴转过多少度,让指南针图片反向转多少度即可.由此可见指南针应用只要在界面中添加一张图片,并让图片总是反向转过反向传感器返回的第一个角度值即可. 下面介绍一下方向传感器:方向传感器用于感应手机设备的摆放状态.方向传感器可以返回三个角度,这三个角度即可确定手机的摆放状态.关于方向传感器返回的三个角度的说明如下. 第一个角度:表示手机顶部朝向正北方的夹角.当手机绕

  • Android实现电子罗盘(指南针)方向传感器的应用

    简介 现在每部Android手机里边都会内置有许多传感器,如光照传感器.加速度传感器.地磁传感器.压力传感器.温度传感器等,它们能够监测到各种发生在手机撒花姑娘的物理事件.当然Android系统只是负责将这些传感器所输出的信息传递给我们,然后我们可以利用这些信息去开发一些好玩的应用. 图片神马的在网上搜个指南针图片就好了,方便学习 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo

  • Android编程实现获取所有传感器数据的方法

    本文实例讲述了Android编程实现获取所有传感器数据的方法.分享给大家供大家参考,具体如下: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" androi

  • Android 利用方向传感器实现指南针具体步骤

    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中  step2:设计应用的UI界面,main.xml 复制代码 代码如下: <SPAN style="FONT-SIZE: 18px"><STRONG><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="htt

随机推荐