`
kanwoerzi
  • 浏览: 1655121 次
文章分类
社区版块
存档分类
最新评论

Android传感器的环境监控

 
阅读更多
Android传感器可以随处监控环境
如:方向、加速表、光线、磁场、临近性、温度等
android.hardware.SensorManager包含几个常量,这表示Android传感器系统的不同方面,包括:

传感器类型方向、加速表、光线、磁场、临近性、温度等。采样率最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。准确性高、低、中、不可靠。

SensorListener接口是传感器应用程序的中心。它包括两个必需方法:

onSensorChanged(intsensor,floatvalues[])方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。

当传感器的准确性更改时,将调用onAccuracyChanged(intsensor,intaccuracy)方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。

要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。注册使用SensorManager类的registerListener方法完成。本文中的代码示例演示了如何注册和注销SensorListener。
示例1
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.widget.TextView;
importandroid.hardware.SensorManager;
importandroid.hardware.SensorListener;
publicclassIBMEyesextendsActivityimplementsSensorListener{
finalStringtag="IBMEyes";
SensorManagersm=null;
TextViewxViewA=null;
TextViewyViewA=null;
TextViewzViewA=null;
TextViewxViewO=null;
TextViewyViewO=null;
TextViewzViewO=null;

/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//getreferencetoSensorManager
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);
xViewA=(TextView)findViewById(R.id.xbox);
yViewA=(TextView)findViewById(R.id.ybox);
zViewA=(TextView)findViewById(R.id.zbox);
xViewO=(TextView)findViewById(R.id.xboxo);
yViewO=(TextView)findViewById(R.id.yboxo);
zViewO=(TextView)findViewById(R.id.zboxo);
}
publicvoidonSensorChanged(intsensor,float[]values){
synchronized(this){
Log.d(tag,"onSensorChanged:"+sensor+",x:"+
values[0]+",y:"+values[1]+",z:"+values[2]);
if(sensor==SensorManager.SENSOR_ORIENTATION){
xViewO.setText("OrientationX:"+values[0]);
yViewO.setText("OrientationY:"+values[1]);
zViewO.setText("OrientationZ:"+values[2]);
}
if(sensor==SensorManager.SENSOR_ACCELEROMETER){
xViewA.setText("AccelX:"+values[0]);
yViewA.setText("AccelY:"+values[1]);
zViewA.setText("AccelZ:"+values[2]);
}
}
}

publicvoidonAccuracyChanged(intsensor,intaccuracy){
Log.d(tag,"onAccuracyChanged:"+sensor+",accuracy:"+accuracy);
}
@Override
protectedvoidonResume(){
super.onResume();
//registerthisclassasalistenerfortheorientationandaccelerometersensors
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION|SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protectedvoid onPause()(){
//unregisterlistener
sm.unregisterListener(this);
super.onPause()();
}
}
该活动的onCreate方法可以引用SensorManager,其中包含所有与传感器有关的函数。
onCreate方法还建立了对6个TextView小部件的引用,您需要使用传感器数据值更新这些小部件。

onResume()方法使用对SensorManager的引用通过registerListener方法注册传感器更新:

第一个参数是实现SensorListener接口的类的实例。

第二个参数是所需传感器的位掩码。在本例中,应用程序从SENSOR_ORIENTATION和SENSOR_ACCELEROMETER请求数据。

第三个参数是一个系统提示,指出应用程序更新传感器值所需的速度。

应用程序(活动)暂停后,需要注销侦听器,这样以后就不会再收到传感器更新。
这通过SensorManager的unregisterListener方法实现。惟一的参数是SensorListener的实例。

在registerListener和unregisterListener方法调用中,应用程序使用关键字this。
注意类定义中的implements关键字,其中声明了该类实现SensorListener接口。这就是要将它传递到registerListener和unregisterListener的原因。

SensorListener必须实现两个方法onSensorChange和onAccuracyChanged。
示例应用程序不关心传感器的准确度,但关注传感器当前的X、Y和Z值。
onAccuracyChanged方法实质上不执行任何操作;它只在每次调用时添加一个日志项。

似乎经常需要调用onSensorChanged方法,因为加速表和方向传感器正在快速发送数据。
查看第一个参数确定哪个传感器在发送数据。确认了发送数据的传感器之后,
将使用方法第二个参数传递的浮点值数组中所包含的数据更新相应的UI元素
注意:在不用对传感器进行监听时,一定要及时的取消监听。
分享到:
评论

相关推荐

    基于Android的物联网环境监控应用设计与实现.pdf

    应用程序的实现结果是基于Android的物联网环境监控应用程序,可以实时监控环境参数,预测和预警环境污染,保护环境和人类健康。 6. 应用前景 基于Android的物联网环境监控应用程序具有广阔的应用前景,包括工业...

    Android摄像头传感器、定位等功能代码,可以直接运行在Android studio上面

    Android摄像头传感器、定位等功能代码,可以直接运行在Android studio上面

    深入探讨Android传感器

    本文内容包括:简介Android传感器功能传感器示例使用MediaRecorderAndroid作为传感器平台结束语下载参考资料Android是一个面向应用程序开发的富平台,它拥有许多具有吸引力的用户界面元素和数据管理功能。...

    使用 Android 旋转传感器并使用自定义视图可视化设备旋转的示例_Java_代码_相关文件_下载

    监控旋转矢量传感器(但仅在活动可见时)。 将原始旋转矩阵转换为俯仰和滚动,以度为单位。 根据设备方向(例如纵向与横向)调整旋转值。 绘制自定义视图,包括使用 Porter-Duff 传输模式创建抗锯齿圆形切口。 更多...

    安卓摇一摇传感器相关-Android陀螺仪编程获取旋转角度.rar

    Android陀螺仪编程获取旋转角度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    基于Android的远程监控App.zip

    本研究即希望利用智能手环作为终端传感器,利用手环采集老年人的身体特征指标,开发一款基于Android的手机软件,利用手机作为终端进行运算判断,最终为子女提供远程的行为预警,可以切实为老年人带来更安心的独居...

    基于Android的林区寒地灌溉监控系统研究.pdf

    根据环境参数特性,对比传统的灌溉监控,选用适合无人值守的移动监控方式,并结合传感器网络技术、GPRS无线接入技术,搭建了一套基于Android手机在线监测远程监控平台,实现了对晒水池和林木的水温、水位等信息数据...

    使用 RxJava 监控设备硬件传感器的 Android 库_java_代码_相关文件_下载

    使用 RxJava 监控硬件传感器的 Android 库。 用法 下面的代码示例演示了如何观察陀螺仪传感器。 请注意,我们正在过滤传感器读数随ReactiveSensorEvent::sensorChanged方法变化时发生的事件。还有描述传感器精度...

    基于Android手机的实验室环境监测系统.pdf

    控制器可以处理和存储实验室的环境信息,并可以与传感器节点和Android监测软件进行交互,实时监控实验室的环境信息。 基于Android手机的实验室环境监测系统可以广泛应用于实验室管理、环境监测、设备监控等领域。该...

    毕业设计(论文)-基于android的物联网监控手机软件设计

    单片机实现,通过温度传感器,加速度传感器以及脉搏心跳传感器,对人体 的体温、姿态、心跳速率及脉搏速率进行测量,并通过 GPRS 模块或串口采 用三种法式(包括短信,WIFI 和 J2EE 服务器)传送监控数据到手机端。...

    基于Android平台串口驱动的多传感器数据传输的实现.pdf

    Android平台串口驱动的多传感器数据传输的实现可以为智能植物生长柜提供实时的环境监控和控制,提高植物的生长速度和质量,同时也可以为智能控制系统提供有价值的参考。 Android平台串口驱动的多传感器数据传输的...

    基于Android的燃气壁挂炉远程监控系统设计.pdf

    基于Android的燃气壁挂炉远程监控系统设计 在本文中,我们设计了一种基于Android的燃气壁挂炉远程监控系统,以满足冬季对无集中供暖室内温度的监控需求。该系统由CC2530组成星型无线传感器网络,由传感器节点把测得...

    Android 利用重力感应调整手机模式

    本例主要是利用手机重力感应器判断手机朝向,正面朝上则设置手机模式为正常状态,手机朝下则设置震动模式

    基于Android平台的智能家居监控系统

    当家庭中有特别需要关注的物体和区域时,家庭的主人可在其所处的家庭环境中安装摄像头,通过网络远程观察其状况,当发生意外情况时也可通过网络监控事态的进展。随着智能移动终端的广泛普及,同时由于其特有的便携性...

    基于Android平台的植物生长柜智能监控软件设计.pdf

    1. 硬件架构:基于Android系统的ARM板作为工作平台,配备多种传感器,例如温度传感器、湿度传感器、CO传感器等,用于采集生长柜内的环境参数。 2. 软件架构:基于Java和Android编程技术对软件进行设计,采用MVC架构...

    基于WiFi的Android局域网视频监控.zip

    针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也...

Global site tag (gtag.js) - Google Analytics