Android传感器MotionSensor开发实验

阅读: 评论:0

Android传感器MotionSensor开发实验
⽬录
⼀、实验⽬的
1. 了解Android开发
2. 掌握传感器调⽤
3. 交互式界⾯设计
⼆、实验要求
1) 搭建开发平台;
2)编写简单程序,实现按钮、屏幕操作的基本功能,应⽤程序下传安装在⼿机运⾏;
乌氏粘度计原理
3)调⽤传感器,采集数据
4)使⽤屏幕显⽰功能,实时显⽰采集的数据;
5)使⽤屏幕绘图功能,实时绘制采集的传感器数据;
6)使⽤对话框⽅式设置存储位置,保存数据;
7)实地测试,数据分析处理(根据实际数据情况,各⾃选⽤有效地⽅法)
三、实验原理
(⼀)第⼀次实验鼓芯
本次实验我们将搭建开发平台,编写简单程序,实现按钮、屏幕操作的基本功能,应⽤程序下传安装在⼿机运⾏。我们需要搭建Android的开发环境并开发⼀个按键交互⼩程序。下⾯我们⾸先介绍⼀下Android开发所需要⽤到的基础框架:JDK和Android SDK开发套件。
1.JDK(Java Development Kit)
JAVA作为⼀款知名的编程语⾔,⾃⾯世以来⼀直⾮常的流⾏。在最近⼏年的编程语⾔排⾏榜上更是稳坐第⼀名的宝位。⽽Android系统在开发之时也选择了JAVA作为其编程语⾔。JDK的全名叫做Java Development Kit JAVA开发包,从⽽为我们使⽤JAVA编程提供了相应的环境以及类库。到⽬前为⽌,Java已经发展到了Java V8版,并在不断完善之中。⽽本次实验使⽤的Android开发均要使⽤JDK作为基础的开发环境。
2.Android SDK
Android SDK是⼀个为Android开发的软件包,它包含了调试器、API函数库、安卓模拟器以及⼀系列开发⽂档在内的各种⼯具。⾕歌官⽅开发出了基于Eclipse的ADT(Android Develop Tools)插件,通过为Eclipse安装插件的⽅式⽀持Android的开发,⽬前官⽅已经停⽌ADT 插件的开发与维护⼯作,并开发出了更加强⼤以及好⽤的Android Studio软件。本次实验则使⽤JDK+Android Studio的组合来开发Android APP。
3.AVD(Android Virtual Devices)
AVD就是运⾏于电脑上的安卓虚拟器,它可以使我们在没有⼿机的情况下通过电脑测试数据。
这与我们真实运⾏⼿机的情况⾮常相近。这样我们就可以⾮常⽅便的在电脑上调试程序。
4.Android 系统平台架构分析
Android 平台由Linux内核、中间件、应⽤程序平台和应⽤软件组成,其系统架构如下图所⽰:
从图中我们可以看到整个安卓系统由Linux核⼼层、库、安卓运⾏时、应⽤程序框架以及应⽤层构成。⽽我们⼀般开发APP都在应⽤层进⾏开发。
a) Linux操作系统和驱动(Linux kernel):
由C语⾔实现。 Android核⼼系统服务依赖于Linux2.6内核,包括:安全性、内存管理、进程管理、⽹络协议、驱动模型。Linux内核也作为硬件和软件栈之间的抽象层。除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显⽰驱动、输⼊设备驱动、⾳频系统驱动、摄像头驱动、WiFi驱动、蓝⽛驱动、电源管理。
b) 程序库 (LIBRARIES)
程序库是指可供使⽤的各种标准程序、⼦程序、⽂件以及它们的⽬录等信息的有序集合,Android包含⼀些C/C++库,Android系统中不同的组件通过应⽤程序框架可以使⽤这些库本地框架是有C/C++实现。包含C/C++库,被Android系统中不同组件使⽤,它们通过Android应⽤程序框架为开发者进⾏服务。
c) Java运⾏环境(ANDROIDRUNTIME)
Android运⾏库包括两部分:⼀是核⼼库,⼆是⾃⾝的Dalvik虚拟机。
核⼼库提供Java编程语⾔核⼼库的⼤多数功能。
Dalvik虚拟机是Google专为Android开发的 。每⼀个Android应⽤程序都在⾃⼰的进程中运⾏,都拥有⼀个独⽴的Dalvik虚拟机实例。
d) Android应⽤框架(ANDROIDFRAMEWORK)
应⽤程序框架是指定义了⼀个应⽤程序运⾏所必须的全部功能组件,开发者也可以访问核⼼应⽤程序所使⽤的API框架。在Android系统中,开发⼈员也可以完全访问核⼼应⽤程序所使⽤的API框架。
e) Android应⽤程序(APPLICATIONS)
Android应⽤程序都是有Java语⾔编写的。⽤户开发的Android应⽤程序和Android的核⼼应⽤程序是同⼀层次的,它们都是基于Android 的系统API构建的。
(⼆)第⼆次实验
我们将进⾏基于Android系统的APP开发实验。⽽本次实验则是关于⼿机传感器的应⽤——加速传感器⼩程序。下⾯我们⾸先介绍⼀下各个传感器。
1.Android的三⼤类传感器
Android传感器按⼤⽅向划分⼤致有这么三类传感器:动作(Motion)传感器、环境(Environmental)传感器、位置(Position)传感器。
(1)动作传感器
这类传感器在三个轴(x、y、z)上测量加速度和旋转⾓度。包括如下⼏个传感器:
加速(accelerometer)传感器、重⼒(gravity)传感器、陀螺仪(gyroscope)传感器、旋转向量(rotational vector )传感器。(2)环境传感器
这类传感器可以测量不同环境的参数,例如,周围环境的空⽓温度和压强、光照强度和湿度。包括如下⼏个传感器:
湿度(barometer)传感器、光线(photometer)传感器、温度(thermometer)传感器
(3)位置传感器
这类传感器可以测量设备的物理位置。包括如下⼏个传感器:
⽅向(orientation)传感器、磁⼒(magnetometer)传感器
了解后我们就开始进⼊传感器的编程⼯作了,接下来我们看⼀下Android为我们提供的传感器框架(Android sensor framework,简称ASF)。
2.Android传感器框架
Android SDK为我们提供了ASF,可以⽤来访问当前Android设备内置的传感器。ASF提供了很多类和接⼝,帮助我们完成各种与传感器有关的任务。例如:
1)确定当前Android设备内置了哪些传感器。
2)确定某⼀个传感器的技术指标。
3)获取传感器传回来的数据,以及定义传感器回传数据的精度。
4)注册和注销传感器事件,这些⽤于监听传感器的变化,通常从传感器回传的数据需要利⽤这些完成。
ASF允许我们访问很多传感器类型,这些传感器有⼀些是基于硬件的传感器,还有⼀些是基于软件的传感器。基于硬件的传感器就是直接以芯⽚形式嵌⼊到Android设备中,这些传感器直接从外部环境获取数据。基于软件的传感器并不是实际的硬件芯⽚,基于软件的传感器传回的数据本质上也来⾃于基于硬件的传感器,只是这些数据通常会经过⼆次加⼯。所以基于软件的传感器也可以称为虚拟(virtual)传感器或合成(synthetic)传感器。
Android对每个设备的传感器都进⾏了抽象,其中SensorManger类⽤来控制传感器,Sensor⽤来描述具体的传感
器,SensorEventListener⽤来监听传感器值的改变。
(1)SensorManager类
⽤于创建sensor service的实例。该类提供了很多⽤于访问和枚举传感器,注册和注销传感器的⽅法。⽽且还提供了与传感器精度、扫描频率、校正有关的常量。
(2)Sensor类
Sensor类为我们提供了⼀些⽤于获取传感器技术参数的⽅法。如版本、类型、⽣产商等。例如所有传感器的TYPE类型如下:
序号传感器Sensor类中定义的TYPE常量
1加速度传感器TYPE_ACCELEROMETER
2温度传感器TYPE_AMBIENT_TEMPERATURE
3陀螺仪传感器TYPE_GYROSCOPE
4光线传感器TYPE_LIGHT
5磁场传感器TYPE_MAGNETIC_FIELD
6压⼒传感器TYPE_PRESSURE
7临近传感器TYPE_PROXIMITY
8湿度传感器TYPE_RELATIVE_HUMIDITY
9⽅向传感器TYPE_ORIENTATION
10重⼒传感器TYPE_GRAVITY
11线性加速传感器TYPE_LINEAR_ACCELERATION
12旋转向量传感器TYPE_ROTATION_VECTOR
注意:1-8是硬件传感器,9是软件传感器,其中⽅向传感器的数据来⾃重⼒和磁场传感器,10-12是硬件或软件传感器。
(3)SensorEvent类
系统使⽤该类创建传感器事件对象。该对象可以提供与传感器事件有关的信息。传感器事件对象包括的信息有原始的传感器回传数据、传感器类型、数据的精度以及触发事件的时间。
(4)SensorEventListener接⼝
该接⼝包含两个回调⽅法,当传感器的回传值或精度发⽣变化时,系统会调⽤这两个回调⽅法。
/** * 传感器精度变化时回调 */
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
/*** 传感器数据变化时回调*/
@Override收获时间到>瓶装水包装
public void onSensorChanged(SensorEvent event) {
.
.
.
蚕豆剥皮机
}
4.获取传感器技术参数
下来我们编写代码来获取⼀下⾃⼰⼿机的传感器技术参数。
TextView tvSensors = (TextView) findViewById(R.id.tv_sensors);
//获取传感器SensorManager对象
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = SensorList(Sensor.TYPE_ALL);
for (Sensor sensor : sensors) {
tvSensors.Name() + "\n");
}
(三)第三次实验
本次实验则是在上⼀次获取传感器数据的基础上实现屏幕绘图功能,和进⼀步完善数据的格式。
1.实时获取系统时间
1.获取系统时间的⽅法
2.通过DateFormat⽅式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM⽉dd⽇ HH:mm:ss");// HH:mm:ss
//获取当前时间
Date date = new Date(System.currentTimeMillis());
(2)第⼆种⽅法Calendar calendar = Instance();
(3)第三种⽅法Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料
我选择通过SimpleDateFormat来获取系统的时间,但是存在⼀个问题,TextView的内容⼀旦设定好之后,就不会⾃动更新了,所以⽤⼀个线程,在线程⾥不断循环,线程每休眠1s,sendMessage给Han勾花网机
dle,在handleMessage⽅法⾥更新UI线程即TextView的内容。
2.android如何在⼦线程中更新UI
android的UI更新不是线程安全的,换句话说就是不允许在⼦线程中进⾏UI的更新,如果想进⾏UI的更新,就必须在主线程中进⾏。
异步消息处理机制
Handler、Looper、Message都是与Android异步消息处理线程相关的概念。

本文发布于:2023-05-27 13:23:51,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/116047.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:传感器   数据   开发   系统   程序   驱动   获取   事件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图