Android平台下传感器技术开发计步器应用.pdf_第1页
Android平台下传感器技术开发计步器应用.pdf_第2页
Android平台下传感器技术开发计步器应用.pdf_第3页
Android平台下传感器技术开发计步器应用.pdf_第4页
Android平台下传感器技术开发计步器应用.pdf_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

A n d r o i d 平台下传感器技术开发计步器应用 苏亚竞昊亚峰索依姆 摘要 结合实际案例 介绍了在程序中注册传感器监听器对手机的加速度变化进行感应的方法 以及使用I n t e n t 在A c t i v i t y 与S e r v i c e 之间进行通信 以及对A n d r o i d 平台下的嵌入式数据库S Q L i t e 进行操作的技巧 关键词 A n d r o i d S Q L i t e N o t i f i c a t i o n 传感器 计步器 1A n d r o i d 及传感器 A n d r o i d 是以c o o s l e 为首的开放手机联盟 O p e nH a n d s e t A l a n c e O H A 于2 0 0 7 年推出的基于L i n u x 平台开源手机 操作系统的名称 目前最新版本为A n d r o i d2 1 A n d r o i d 旨在 打造一个真正的标准化 开放化的嵌入式手机软件平台 A n d r o i d 采用了软件层叠的架构 包括以L i n u x 为核心的 底层 以函数库和虚拟机为主的中间层以及以应用为主的上 层 底层和中间层主要由C 或C 开发 上层应用主要由J a v a 编写 A n d r o i d 优于其他嵌入式软件平台的一个方面就是方便地 支持多种传感器 可以感应包括手机姿态 加速度 磁场 光 强 温度 压力等多种物理量的变化 传感器应用也是目前比 较热门的技术 在A n d r o i d 平台下开发基于传感器的应用也比 较方便 只需要在程序注册相应的传感器监听器即可 由于在手机模拟器中无法对基于传感器开发的应用进行方 便地测试与调试 因此文中使用了一个开源T 具S e n s o r S i m u l a t o r 来辅助调试 该工具可以模拟传感器的变化从而达到在手 机模拟器中也可以调试传感器应用程序的目的 打开以下网址 可以找到S e n s o r S i m u l a t o r 的下载链接 h t t p c o d e g o o g l e c o r n p o p e n i n t e n t s w i k i S e n s o r S i m u l a t o r 2案例功能 下文将结合计步器应用程序的开发来详细介绍如何在A n d r o i d 平台下开发基于传感器的应用程序 首先对计步器应用 的功能和界面进行简单的介绍 2 1 程序界面 程序运行界面如图1 所示 其中主窗体包括两个部分 上半部分用于显示最近7 天每天走过的步数 以及今日走过的 步数 通过一个自定义的V i e w 来实现 下半部分用于摆放3 个程序控制按钮 勰嚣与 鹣 图1 计步器应用程序界面 2 2 软件实现的功能 在程序运行时自动连接数据库 读取历史数据并将其可视 化地显示到屏幕上 程序运行后会自动启动一个S e r v i c e 组件 用于检测手机 的加速度状态 当用户携带手机步行时 传感器会捕获到这个 动作并更新记录已走步数的计数器 如果此时程序正在前台显 示 那么在屏幕中除了刷新走过的步数之外 还将播放 d 段 走路的动域 点击 删除数据 按钮会删除掉数据库中存储的历史数据 点击 停止服务 按钮会停止后台S e r v i c e 的执行 同时 状态栏将不再显示计步器的N o t i f i c a t i o n 点击 转为后台 按钮将关闭程序界面 但保留后台执行 的S e r v i c e 当用户按住手机屏幕的状态栏往下拖拉时 会在展 开的状态栏中看到本程序的N o t i f i c a t i o n 如图2 所示 图2 手机状态栏中的计步器N o t i f i c a t i o n 一一 一 一 集一密一慧 智 一 兰 第一 用 实一 一 一一一 一 万方数据 唧I O R K C 0 l 啊U I C 盯I O N 2 3 数据库表 本应用程序使用了A M m i d 平台内置的S Q L i t e 嵌入式数 据库 数据库中包含一张名为 s t e p t a b l e 的表 用来存放历 史的已走步数信息 表I 列出了s t e p t a b l e 表各个字段的情况 表1表s t e p t a b l e 的所有字段情况 l 字段名 字殷含义数据类型是否为主键 I i d 自动编号 i n t e g e r 是 l s t e p 走过的步数 i n t e g e r 否 3 数据库辅助类的开发 开发应用正式功能之前首先要开发对数据库访问的辅助类 M y S Q L i t e H e l p e r 其主要的功能为连接并打开S Q L i t e 数据库 代码如下 p a c k a g ew 谚 w 瞎 声明所在包 i r e p o r ta n d r o i d c o n t e n t C o n t e x t 鹏 入栩美类 省略部分引入相关类的代码 m r ta n d r o i d d a t a b a s e s q l i t e S O L i t e O p e n H e t p e r p u b l i cc l a s sM y S O L i t e H e l p e re x t e n d sS O L i t e C I p e n H e l p e d p u b l i cs t a t i cf i n a lS t r i n g F A 8 L E N A M E s t e p t a b l e t p u b l i cs t a t i cf i n a lS t r i n gl D i d p u b l i cs t a t i cf i n a lS t r i n gS T E P s t e p p u b l i cs t a t i cf i n a lS t d n gU P C 皤汀E E A T E u p d a t e p u b l i cM y S Q L i t e H e l p e r C o n t e x tc o n t e x t S t r i n gn a m e C u r s o r F a c t o r yf a c t o r y i n tv e r s i o n 删构造器 s u p e d c o n t e x t n a m e f a c t o r y v e r s i o n p u b l i cv o i do n C r e a t e S O L i t e D a t a b a s ed b f d b e x e c S O L c r e a t et a b l e i fn o te x i s 馏 T A B 旺一N A M E 创建数据库表 l D Ii n t e g e rp r i m a r yk e y S T E P i n t e g e r 1 7 p u b l i cv o i do n U p g m d e S Q L 的D a t a b a s ed b i n to l d V e r s i o n i n tn e w V e r s i o n 删对o n U p g r a d e 方法的重写 在上述代码中创建了一个继承自S Q L i t e O p e n H e l p e r 类的子 类 并重写了其中的o n C r e a t e 和o n U p g r a d e 方法 o n C r e a t e 方 法将在数据库第一次被创建时调用 本案例在该方法中执行了 创建表的代码 o n U p g r a d e 方法在数据库版本发生变化时调用 4 W a l k i n g A c t i v i t y 类的开发 完成了数据库辅助类的开发后就可以开发W a l k i n g A c t i v i t y 类了 其是应用程序的用户界面 主要功能是按照X M L 布局 文件的内容显示界面并与用户进行交互 代码如下 p a c k a g ew y f w p f 声翳所在包 i m p o r tj a v a u t i l A r r a y L i s t 弓l 入榴关类 i m p o r ta n d r o i d a p p A c t i v i t y 省略部分薯 入相关类的代码 i m p o r ta n d r o i d v i e w V i e w 0 n C l i c k L i s t e n e r l m p o r ta n d m i d w i d g e t B u t t o n p u b l i cc l a s sW a l k i n g A c t i v i t ye x t e n d sA c t i v i t yi m p l e m e n t s O n C l i c k U s t e n e r W a l k i n g V i e ww v N V a l k i n g V i e w 对象弓 用 数据库名称 p u b l i cs t a t i cf i n a lS t r i n gD 8 N A M E s t e p d F M y S Q L i t e H e l p e rm h 声明数据库辅助类 S O L i t e D a t a b a s ed b 数据库对象 B u t t o nb t n T o B a c k s t a g e 饽专入后台按钮 B u t t o nb t n S t o p S e r v i c e 停止服务按钮 B u t t o nb t n D e l e t e D a t a 朋眄除数据按钮 S t e p U p d a t e R e c e i v e rr e c e i v e t 定义一个继承自B r o a d c a s t R e c e i v e r 的内部类 S t e p U p d a t e R e c e i v e r 来接受传感器的信息 p u b l i cc l a s sS t e p U p d a t e R e c e i v e re x t e n d sB r o a d c a s t R e e e i v e r p u b l i cv o i do n R e c e i v e C o n t e x tc o n t e x t I n t e n tI n t e n t t B u n d l eb u n d l e i n t e n t g e t E x t r a s 0 E 得B u n d l e I n ts t e p s b u n d l e g e t I n t s t e p 读取步数 州 s t e p s T o d a y s t e p s w v i s M o v i n g t r u e W V p o s t l n v a l i d a t e 0 Z l J 新W a l k i n g V i e w 重写o n C r e a t e 方法 在A c t i v i t y 被创建时调用 p u b l i cv o i do n C r e a t e B u n d l es a v e d l n s t a n c e S t a t e l s u p e r o n C r e a t e s a v e d l n s t a n c e S t a t e s e t C o n t e n t V i e w R 1 a y o u t m a i n 设置当前屏幕 W V W a l k i n g V i e w f i n d V i e w B y l d R i d w a l k i n g V i e w b t n 沁B a c k s t a g e B u t t o n f i n d V i e w B y l d R i d b t n D i s p o s e b t n T o B a c k s t a g e s e t O n C l i c k L i s t e n e r t h i s b t n S t o p S e r v i c e B u t t o n f i n d V i e w B y l d R i d b t n S t o p b t n S t o p S e r v i c e s e t O n C l i c k L i s t e n e r t h i s b t n D e l e t e D a 协 B u t t o n f i n d V i e w B y l d R i d b t n D e l e t e D a t a b t n D e l e t e D a t a s e t O n C t i c k L i s t e n e r t h i s 注豫R e c e i v e r r e c e i v e r n e wS t e p U p d a t e R e c e i v e r O I n t e n t F i l t e rf i l t e r n e wI n t e n t F i l t e r 0 f i l t e r a d d A c t i o n w y f w p f W a l k i n g A c t i v i t y r e g i s t e r R e c e i v e r r e c e i v e r f i l t e r 艄动注册了传感器监听的S e r v i c e I n t e n ti n e wI n t e n t t h i s W a l k i n g S e r v i c e c l a s s s t a r t S e r v i c e i m h n e wM y S Q L 的H e l p e r t h i s D B N A M E n u l l l r e q u i r e D a t a 0 向S e r v i c e 请求今日走过步数 重写o n D e s t r o y 方法 p r o t e c t e dv o i do n D e s t r o y u n r e g i s t e r R e c e i v e r r e c e i v e r l i e 销R e c e i v e r 万方数据 s u p e r o n D e s t r o y 0 重写O n C l i c k U s t e n e r 接口的o n C l i c k 方法 p u b l i cv o i do n C l i c k V J e wv i e w B 仿法 向S e r v i c e 请求今日走过的步数 p u b l i cv o i dr e q u i r e D a t a 0 0 上述代码为W a l k i n gA c t i v i t y 类的代码框架 由于 W a l k i n g A c t i v i t y 实现了O n C l i c k L i s t e n e r 接1 2 1 所以需要对接口 中的o n C l i c k 方法进行重写 蘑写的o n C l i c k 方法代码如下 p u b l i cv o i do n C l i c k V i e wv i e w 0 i f v i e w b t n S t o p S e r v i c e 停止后台服务 I n t e n ti n t e n t n e wI n t e n t 0 i n t e n t s e t A c t i o n w y f w p f W a l k i n g S e r v i c e i n t e n t p u t E x t r a c m d W a t k i n g S e r v i c e C M D S T O P s e n d B r o a d c a s t i n t e n t e l s ei f v i e w b t n T o B a c k s t a g e f i n i s h 转到后台 e l s ei f v i e w 蜕n O e I e t e D a t a K 查看历史数据 S Q L i t e D a t a b a s ed b S Q L i t e D a t a b a s e o p e n O r C r e a t e D a t a b a s e D B N A M E C o n t e x t M O D E P R l V A T E n u l l d b d e l e t e M y S Q L i t e H e l p e r 1 A B L E p 幽氏M E n u l l n u l l d b c l o s e W V s t e p s l n W e e k V v y g e t S Q L D a t a 7 W V p o s t l n v a l i d a t e 0 l 在W a l k i n g A c t i v i t y 的o n C r e a t e 方法的最后调用了r e q u i r e D a t a 方法向S e r v i c e 发送I n t e n t 请求今日走过的步数 该方法 的代码如下 p u b l i cv o i dr e q u i r e D a t a 0 I n t e n ti n t e n t n e wI n t e n t 0 删建I n t e n t i n t e n t s e t A c t i o n w y f w p f W a l k i n g S e r v i c e i n t e n t p u t E x t r a c m d W a l k i n g S e r v i c e C M D U P D A T A E s e n d B r o a d c a s t i n t e n t 臌出消息广播 5 W a l k i n g V i e w 的开发 完成了W a l k i n g A c t i v i t y 类的开发后就需要开发用于显示计 步器的历史数据及绘制今日走过的步数及走步时动画的自定义 V i e w W a l k i n g V i e w 了 其代码框架如下 p a c k a g ew y f w p f i m p o r tj a v a u t i l A r r a y L i s t 渤醯2 0 揪10 2 3 鹚焉 省略部分引入相关类的代码 i m p o r ta n d r o i d v i e w V i e w p u b l i cc l a s sW a l k i n g V i e we x t e n d sV i e w A r r a y L i s t s t e p s l n W e e k n u l l 史数据 i n ts t e p s T o d a y 0 记录今天走的步数 i n tg a p Y 8 力7 屏幕最上面留出的空隙 I n td i s t Y 1 0 髟每一条的间距 n tc e l l H e i g h t 3 0 每一条的高度 f l o a tS T E P M A X 1 0 0 0 O f 每天最大的步数 I n tm a x S t e p W i d t h 2 8 0 最大步数在屏幕中宽度 B i t m a p ls p r i t e 运动小入的图片数组 B i t m a p 玎d i g i t 傲字图片数组 8 i t m a pb a c k c e l l 臌色渐变条 b o o l e a ni s M o v i n g f a I s e i n tf r a m e t n d e x 肌己录遥动小人的帧索弓l M y S Q L i t e H e l p e rm h 操作数据库的辅助类 S Q L i t e D a t a b a s ed b 数据库操作对象 p u b l W a l k i n g V i e w C o n t e x tc o n t e x t A t t r i b u t e S e t a t t r s f s u p e r c o n t e x t a t t r s s p r i t e n e wB i t m a p 5 d i g i t n e wB i t m a p 10 1 韧始化图片 R e s o u r c e sr e s g e t R e s o u r c e s 0 s p r i t e 0 l B i t m a p F a c t o r y d e c o d e R e s o u r c e r e s R d r a w a b l e a c L l 7 雀略邦分B i t m a p 的宅 建代码 b a c k c e l l B i t m a p F a c t o r y d e c o d e R e s o u r c e r e s R d m w a b l e b a c k c e l l 获取数据库中最近7 天内的数据 m h n e wM y S Q L i t e H e l p e r c o n t e x t W a t k i n g A c t i v i t y D 8 一N A M E n u l l 1 s t e p s l n W e e k g e t S Q L D a t a 7 k p r o t e c t e dv o i do n D r a w C a n v a sc a n v a s s u p e r o n D r a w c a n v a s d r a w P r e v i o u s c a n v a s 朋西以蘸走过的步数 d r a w T o d a y c a n v a s 厕今天走过的步数 l 艉垂今天走的步数 p r i v a t ev o i dd r a w T o d a y C a r r v a sc a n v a s 0 画之前走过的步数 p r i v a t ev o i dd r a w P r e v i o u s C a n v a sc a n v a s 0 从数据库中获取历史数据 p u b l i cA r r a y U s t g e t S Q L D a t a S t r i n gl i m i t 0 上述为W a l k i n g V i e w 类的代码框架 在W a l k i n g V i e w 类的 构造器中将需要用到的图片资源初始化的同时 调用g e t S Q L D a t a 方法获取数据库中的历史数据 W a l k i n g V i e w 类重写了o n D r a w 方法 该方法需要调用 d r a w P r e v i o u s 和d r a w T o d a y 方法分别对历史数据和今日走步情 况进行绘制 这3 个方法以及在d r a w T o d a y 方法中调用到的 一 一 一 一 集 一密一慧 智 一 甜 第一 用 实 一 一一一 一 一一 万方数据 一删O R K B 0 啊啊U l C 曩T I O N d r a w D i g i t s 方法的详细代码如下 画今天走的步数 p r i v a t ev o i dd r a w T o d a y C a n v a sc a n v a s t P a i n tp a i n t n e wP a i n t O p a i n t s e t C o l o r C o l o r C Y A N f l o a ts t r o k e w i d t h p a i n t g e t S t r o k e W i d t h 0 S t y l eS p a i n t g e t S W r l e O p a i n t s e t S t y l e S t y l e S T R O K E p a i n t s e t S t r o k e W i d t h 2 0 0 c a n v a s d r a w U R e o 3 0 0 3 2 0 3 0 0 p a i n t p a i n t s e t S W I e s p a i n t s e t S t r o k e W i d t h s t r o k e w i d t h 恢复画笔 把当前步数换算为在屏幕上绘制的条宽度 i n tw i d t h i n t s t e p s T o d a y S T E P M A X 2 8 0 c a n v a s d r a w B i t m a p b a c k c e U o t3 2 0 p a i n t p a i n t s e t C o l o r C o l o r 8 L A C K k c a n v a s d r a w R e c t w i d t h 3 2 0 J3 2 0 3 2 0 c e t l H e i g h t p a i n t 力嚯蚕出遮罩屡 i f i s M o v i n g X 触B 果在运动 就切换犊序魏 c a n v a s d r a w B i t m a p s p r i t e f r a m e l n d e x 5 1 w i d t h 2 0 3 2 0 p a i n t i s M o v i n g f a l s e e l s e 力f 如果没在走步 就绘制静止的那张图片 c a n v a s d r a w B i t m a p s p r i t e 4 w i d t h 2 0 3 2 0 p a i n t l d r a w D i g i t c a n v a s w i d t h 绘制数字 霪之前走过的步数 p r i v a t ev o i dd r a w P r e v i o u s C a n v a sc a n v a s P a i n tp a i n t n e wP a i n t O f o r i n ti 0 i s t e p s l n W e e k s i z e 0 i S t d n gO S s t e p s l n W e e k g e t i i n tS I n t e g e r v a l u e O f o s i n t V a l u e i n tw i d t h i m s s T E P M A X m a x S t e t m W i d t h 力崃出指定的步数在统计条中占得宽度 i mt e m p Y c e l l H e i g h t d i s t Y i c a n v a s d r a w B i t m a p b a c k c e t l 0 c e l l H e i g h t d i s t Y i p a i n t 厨出渐变条 p a i n t s e t C o l o r C o l o r 8 L A C K c a n v a s d r a w R e c t w i d t h t e m p Y 3 2 0 t e m p Y c e l l H e i g h t p a i n t p a i n t s e t T e x t A l i g n A l i g n L E 雨 p a i n t s e t C o l o r C o l o r C Y A N l p a i n t s e t A n t i A l i a s t r u e c a n v a s d r a w T e x t 走了 s t e p s l n W e e k g e t i 步 w i d t h t e m p Y c e l l H e i g h t 2 p a i n 臼 从数据库中获取历史数据 p u b l i cA r r a y U s t g e t S Q L D a t a S t r i n gl i m i t 获得S Q L i t e D a t a b a s e 对象 d b m h g e t R e a d a b l e D a t a b a s e 0 S t r i n g l lc o l s M y S Q L i t e H e l p e r I D M y S Q L i t e H e l p e r S T E P C u r s o rC 柏 q u e r y M y S Q L i t e H e l p e r T A B L E N A M E c o l s n u l l n u l l n u l l n u l l M y S Q L i t e H e l p e r I D D E S C l i m i t A r r a y L i s t a l n e wA r r a y U s t 0 f o r c m o v e T o F i r s t 0 f C i s A f t e r L a s t 0 c m o v e T o N e x t 0 f a t a d d c g e t S t r i n g j C c l o s e d b c l o s e r e t u r na l 将数字通过数字图片绘弗 劐屏幕上 p u b l i cv o i dd r a w D i g i t C a n v a sc a n v a s i n tw i d t h l S t r i n gs S t e p s t e p s T o d a y i n tl s S t e p 1 e n g t h f o r i n ti O i 2 0 0 i s A c t i v i t y O n t n J e i f p r e C o o r d i n a t e n u l l 还未存过数据 I n t e n ti n e wIntent0 preCoordinate new f l o a t 3 i s e t A c t i o n v y f w p f W a l k i n g A c t i v i t y f o r i n t 0 0 3 j i p u t E x t r a s t e p s t e p s p r e C o o r d i n a t e i v a l u e s i s a n d B r o a d c a s t i b r e a k 万方数据 e l s e 记录了原始坐标的话 就进行比较 i n ta n g l e c a l c u l a t e A n g l e v a l u e s p r e C o o r d i r r a t e i f a n g l e W A L K I N G j H R E S H O L D f a t h e r s t e p s I l f 数增加 u p d a t e D a t a 0 厦新步数 f o r i n t O l 3 K p r e C o o r d i n a t e i v a l u e s i l I a s t T i m e c u r r e n t T i m e 垂叛计时 方法 计舞加速度矢量角度的方法 p u b l i ci n tc a f c u l a t e A n g l e f l o a t n e w P o i n t s f l o a t o i d P o i n t s 0 肪法 淘A c t i v i t y 更新步数 p u b l i cv o i du p d a t e D a t a 0 0 W a l k i n g L i s t e n e r 类的代码中 主要是对S e n s o r L i s t e n e r 接口 中的o n S e n s o r C h a n g e d 方法进行了重写 在该方法中将读取到 的传感器采样值传给a n a l y s e D a t a 方法进行分析 在a n a l y s e D a t a 方法中 调用了c M c u l a t e A n d e 方法来计算 固定的时间间隔间手机加速度向量方向的夹角 c a l c u l a t e A n g l e 方法的代码如下 方法 计算两个加速度矢量央角的方法 p u 蹦l ci n tc a l c u l a t e A n g l e f l o a t 1n e w P o i n t s f t o a t Jo l d P o i n t s l i n ta n g l e 0 f l o a tv e c t o r P r o d u c t O 朐量积 f l o a tn e w M o l d 0 厮向量的模 f l o a to l d M o l d 0 t E l 向量的援 f o r i n ti O i 3 l v e c t o r P r o d u c t n e w P o i n t s i o l d P o i n t s i n e w M o l d n e w P o i n t s i n e w P o i n t s i o l d M o l d o l d P o i n t s i o l d P o i n t s i n e w M o t d f l o a t M a t h s q r t n e w M o l d o l d M o l d f l o a t M a t h s q r t o l d M o l d 西 十算夹角的余弦 f l o a tc o s i n e A n g t e f l o a t v e c t o r P r o d u c t n e w M o l d o l d M o l d m 通过余弦值求角度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论