来源:http://www.zsqz.com/chuangke/10r.htm
【学习目标】
1.掌握App Inventor中对调用手机计步器、位置传感器等硬件传感器的应用;
2.了解数据持久化,掌握数据存储等功能的实现;
3.通过编程实践,感受和体验利用手机自身硬件开发实用的手机应用程序。 【项目范例】
1. 情境
现在的手机都已经具有计步器及位置传感器等各种硬件传感器,利用这些传感器,我们就可以自制一个适合自身实际情况的独一无二的计步器,并能够在此基础上进行功能扩充,变成一个健身宝,记录自己的运动情况及BMI等健康指数。
本课将根据这一想法,与大家一起来创建一个“健身宝”的应用程序。运行本程序后,程序可以自动记录你一天的走路步数、距离、时间以及位置等情况。有兴趣的同学还可以在此基础上添加更多有趣实用的功能。
2.主题:编写“健身宝”手机应用程序
3.问题:
(1)如何获取走路步数、距离?
(2)如何计算走路时间?
(3)如何获得当前位置?
(4)如何存储信息?
4.规划:
(1)利用pedometer(计步器)组件确定走路步数和距离;
(2)利用计时器计算时间;
(3)利用位置传感器获得当前位置;
(4)利用微数据库存储信息。
5.成果:
“健身宝”程序在手机中运行的截图如图10-1所示。
图10-1 “健身宝”手机APP及运行情况
【学习过程】 一、APP知识准备
1. 涵盖内容
本课内容覆盖了以下的组件及概念:
标签组件:用于显示步数、距离、时间和位置等信息;
列表显示框组件:用于显示保存的数据列表;
按钮组件:用于启动计步及保存信息等操作;
pedometer计步器组件:收集计步信息;
计时器组件:用于计算时间;
位置传感器组件:收集位置信息;
微数据库组件:用于持久化存储数据。
2. 准备开始
登陆App Inventor网站(http://app.gzjkw.net/),新建项目,命名为“JianShenBao”, 将屏幕“标题”、“AppNmae”、“应用说明”等属性设为“健身宝”,并在手机上运行AI伴侣进行测试连接。
注意:该程序需要用到手机内置的计步器传感器(或加速度传感器)和GPS传感器,请确保您的手机具备此功能(一般新手机都具有这几个功能,比较旧的手机可能没有)
二、程序流程及规划
在有了创意想法及相应的知识了解后,就可以根据想法对要开发的程序进行初步规划和流程安排:
1、程序规划
由于程序较为简单,可在一个页面中完成所有功能。
页面最顶部设置显示步数、距离、计时、位置等关键信息的显示区域;
在显示区域下面,设置开始、停止、保存等按钮,用于启动程序的计步、计时功能;
在页面最底部设置历史信息的保存信息显示区域,用来保存历史数据,同时提供一个清除按钮,可清除这一区域信息。
2、流程图
按照上述规划,程序流程图如图10-2所示(图为主要关键步骤所做工作的简要规划):
图10-2 程序流程规划
三、组件设计基础版(界面设计)
根据程序流程规划,创建一个比较简单的基础版“健身宝”应用程序,一般只需要用到以下七种组件。
1、标签(步数、距离、计时、位置):一些标签用于显示说明文字,一些标签用于显示步数、距离、时间和位置等关键信息。对于显示关键信息的标签,需要对其进行重命名,以便在程序中进行调用和设置。
2、列表显示框1:用于显示保存的历史数据列表,例如:****年*月*日——****年*月*日共计**步**秒。
3、按钮(开始、暂停、恢复、停止、保存、清除):用于启动对应的程序功能,也是程序设计时的主体所在。
4、计步器(pedometer1):用于启动计步器,并收集距离、步数等运动信息。
5、计时器1:可进行计时操作,计算运动时间,还可单独用于简单秒表功能。
6、位置传感器1:通过手机GPS等传感器,收集当前位置信息。
7、微数据库1:永久存储历史运动信息,供用户参考和查看。
屏幕上的组件设计如图10-3所示。
图10-3组件设计器视图中的界面及组件列表
注意上图中组件列表的部分标签和按钮要进行重命名,以免在后续的程序设计中无法准确定位对应组件其中pedometer、计时器及位置传感器的组件属性需要稍作修改,具体如图10-4所示:图10-4 关键组件属性设置 四、为组件添加行为(程序设计)
组件创建完成后,可切换到逻辑设计(块编辑器)来实现程序的行为,具体设置的目标为:
1、程序初始化:
初始化变量包括“计时”、“计步”、“距离”、“保存列表”等,其中的“保存列表”用来存储历史数据信息。
同时检测微数据库中是否有历史数据,如果有历史数据,则提取并显示在列表中,如果没有,则显示为空。
图10-5 程序初始化2、设置按钮动作行为:
按照程序规划流程图的规划,
点击“开始”按钮,主要执行计步、计时、测距离等功能,同时要启用暂停、停止、保存按钮的功能,更新相应的信息; 点击“停止”按钮,主要执行停止计时器,设置显示信息,停止计步器,禁用暂停、恢复按钮的功能;
点击“保存”按钮,先将计时、计步、距离等信息合并为一条信息,并添加到“保存列表”中,然后调用微数据库的保存数值功能,保存次信息为“步行信息”标签,并显示在列表框中;
点击“清除”按钮,则清除显示列表框中的历史数据;
点击“暂停”按钮,则暂停计时器和计步器的功能,同时启用恢复按钮功能,停止暂停按钮功能;
点击“恢复”按钮,其功能与暂停按钮正好相反;
图10-6 各个按钮程序片段 3、传感器和计时器行为:
计步器:当计步器检测到行走步数后,即记录计步和距离数据,并更新对应标签的显示信息;
计时器:当计时器开始计时后,每隔一秒钟更新一次计时信息的显示;
位置传感器:当位置传感器的状态或者位置被更改后,即获取其当前地址,由于显示位置有限,我们可以利用文本工具截取地址的前面一部分信息进行显示。
图10-7 传感器行为程序片段
【测试】
通过AI伴侣或者直接打包APK程序,点击“开始”按钮,晃动手机或实际不行测试,观察其中的数据。
注意:
1、其中的位置传感器可能需要到空旷地带才能获得gps信号,因此,在室内测试时位置信息可能为空;
2、计步器传感器有两种模式:检测简单步数和检测行走步数,他们的区别在于后者需要手机在上下左右前后三个维度都有位移改变才算有效,前者只需要在上下和左右两个维度有位移即算有效。
【改进】
1、界面美化,设置程序图标;
2、可针对每一个人的不同情况,手动设置身高、体重、步幅、性别等个人信息,并据此计算BMI指数等表示健康的信息,实现个性化功能;
3、可增加拍照功能等,如图10-8所示。
图10-8 改进后的“健身宝”程序
【小结】
1、利用Pedometer计步器组件,可以实现计步和测距的功能;
2、通过位置传感器组件,可以获取当前gps位置信息;
3、通过计时器组件,可制作秒表及计时等功能。
4、通过微数据库组件,可将数据永久储存于手机中。 【课堂任务】
1、基础任务:根据本课内容,动手实践“健身宝”App的开发和调试运行。
2、提高任务:自行设计、编写一个实用性较强的健康类软件或对“健身宝”进行进一步拓展以实现一个具有完整功能的健身宝程序。 【参考资源】【参一】微数据库
微数据库(TinyDB)是一个非可视组件,用来保存程序中的数据。
用App Inventor创建的应用程序,在每次运行时都会进行初始化:如果程序中设定了变量的值,当用户退出程序再重新运行时,那些被设定过的变量值将不复存在;而微数据库则为 程序提供了一种永久的数据存储,即每次程序启动时,都可以获得那些保存过的数据。比如游戏中保存的最高得分,每次游戏中都可以读取到它。
数据项是以字符串的方式保存在标签的名下,即需要为保存的每一项数据设定一个专用的标签,以便之后用这个标签来读取已经保存的数据。
每个程序中只有一个数据存储区,即便在程序中添加了多个微数据库组件,它们也将使用同一个存储区。如果想使用不同的存储区,需要使用不同的密钥。同样,每个程序拥有独立的存储区,虽然在多屏应用 程序中能够在不同屏幕之间共享数据,但同一部手机上的不同程序之间却无法通过微数据库来传递数据。
在使用AI伴侣开发应用程序时,使用该伴侣的所有程序都将共用一个微数据库,而一旦应用程序打包之后,数据的共享将不复存在。但在开发过程中,每次创建新项目时,都需留心清空微数据库。
属性【Properties】无。
事件【Events】无。
方法【Methods】:以“微数据库1”为例
1、清空所有数据【ClearAll()】:调用 微数据库1.清除所有数据——清除存储区的所有数据
2、清除标签数据【ClearTag(text tag)】:调用 微数据库1.清除标签数据——清除指定标签名下的数据记录。
3、获取标签数据【any GetTags()】:调用 微数据库1.获取标签数据——返回该数据存储区内全部标签列表
4、获取数值【any GetValue(text tag, any valueIfTagNotThere)】:调用 微数据库1.获取数值——读取保存在给定标签名下的数据,如果 无标签,则返回某预设值。
5、保存数值【StoreValue(text tag, any valueToStore)】:调用 微数据库1.保存数值——在指定的标签名下保存给定的值,每当 程序重新启动时,数据依然存储在手机中。 【参二】健身宝程序及资源下载 AI伴侣最新版(广州版) 健身宝(简版)(请右键选择链接另存为) 健身宝(扩展版)(请右键选择链接另存为) 【参三】我的车在哪儿 1、位置传感器
App Inventor为访问GPS信息提供了位置传感器组件,该组件具有纬度、经度及海拔高度三个属性。
两种情况可以触发位置信息改变事件:传感器第一次收到读数时,以及当位置发生变化而传感器收到新的读数时。其中第一次读数通常会延迟几秒钟,有时也会一直没有读数。例如,如果你在室内而且没有连接WiFi,设备将无法获得读数。无法获得读数的另一个原因,可能是你的手机出于省电的目的,关闭了GPS功能。如果你的位置传感器一直收不到数据,你需要逐一排查上述可能的原因。 2、调用地图
(1)activity启动器
活动启动器组件允许我们通过一个应用程序启动其他应用程序来组合应用程序,简单说就是可以让我们在appinventor里面直接调用手机上已经安装的其他程序,比如相机、地图等。
(2)属性
Action属性:android.intent.action.VIEW
DataUri属性:这是调用其他程序的关键属性,可在程序中动态设置,具体每个程序的调用参数都不尽相同,需要查阅对应程序的官方技术文档。具体使用及说明可以参考我摘录的官方的一个说明:http://blog.sina.com.cn/s/blog_66fa66650102w7is.html以及我在实施地图调用过程中的一些记录说明:http://blog.sina.com.cn/s/blog_66fa66650102wwfl.html (3)调用高德地图:
高德地图的uri参考地址:http://lbs.amap.com/api/uri-api/ ... nt/#point-on-lnglat (4)调用百度地图:
百度地图的uri参考地址:http://lbsyun.baidu.com/index.php?title=uri/api/web? (5)本程序的前台界面如图10-9所示:
(6)后台程序模块如图10-10所示:
图10-7 将输入的文本读出来的程序设计 |