浙江师范大学
本科生课程论文封面
课程名称:
论文名称:
Android手机程序开发
《软件开发文档》
专 | 学 | 院 | 数理与信息工程学院_ |
业__________通信工程___________ |
学 号____________________________________姓 名___________王晓洁____________任课教师_______________熊继平____________成 绩_______________________________评阅教师
签
名_______________________________ 浙江师范大学数理信息学院
基于加速度传感器的计步器
实验目的:利用加速度传感器实现计步器的功能。
实验过程一、组件设计
图1界面设计
二、相关代码
【1】全局变量“step”用来记录行走步数。
【2】定义过程
将标签1的文本设置为步数值。
【3】核心算法当加速度传感器被晃动时, step加1.并且调用过程。
最后有一个清除步数的功能。
实验感想
第一次接触这样拼图类的代码编写方法,感觉很有趣, 适合青少年起步学习, 不 枯燥。这个APP虽然功能简单,但是要做到精确计步却不容易。在算法上有很大需要改进。
基于蓝牙的手机通信软件
实验目的:
根据AppInventor 2 提供的两个蓝牙通信组件:蓝牙客户端、蓝牙服务器,将这两个组件配合使用,实现
简单的即时通信功能。
实验过程:
一、组件设置图 1界面设计二、与蓝牙服务器相关的代码 【1】全局变量“角色”用来表明当前设备在通
信中的角色:服务器或客户端。
【2】“在线”设置
如图2所示,当选中“在线”复选框时,表明本设备现在充当服务器的角色,可以接受来自其他设备的连接请求。 一旦该设备成为服务器,“选择列表” 及“断开连接” 组件将不可用。 图 2修改蓝牙设备的角色【3】接收连接事件
当蓝牙服务器收到连接请求时,将触发该事件。如果连接成功,即连接状态值为真,则向所连接的设备发送
“已连接到服务器,可以开始聊天了 ...”,并开始启用计时器,随时监听客
户端发来的消息;如果连接不成功,则不启用计时器。如图 3所示。图3蓝牙服务器“接收连接”事件处理程序
三、与蓝牙客户端相关的代码
【1】当“选择列表”准备选择时当用户点击“选择列表”时,将打开一个列表,里面列出了所有已配对的蓝
牙设备,用户可
以选择其一进行连接。
图4准备连接
【2】当“选择列表”完成选择时
当用户选择了一个蓝牙设备,意味着用户向所选设备发出了连接请求, “让蓝牙客户端连接设备”的结果可能是真(连接成功),也可能是假(连接失败)。如果成功,则设全局变量“角色”值为“客户端”,并启动计时器;如果失败,则不启动计时器。
完成选扌睪时 | | | |
蓝才客尸靖 |
| | |
| 参数:地址 | 选择列表遐|选中贡J |
global甫色
为 | 恤鍾卿|腳国ara | |||||||||||||||
| ||||||||||||||||
|
|
图5进行连接 | 」 |
【3】断开连接
|
执行 止蛀a血1 断开已连接设备 |
图6断开连接
四、发送消息
【1】全局变量“聊天内容”与自定义过程“拼字符串”:以适当的方式来呈现聊天记录, 即,为聊天内容添加换行符,并表明发言者身份。
图7对聊天内容的记录与组织
【2】发送一条消息
图8角色不同使用不同蓝牙组件来发送消息
五、接收消息
图9不同角色使用不同蓝牙组件来接收消息
六、清空聊天记录
图10清空聊天记录
实验结果:
实验感想:
我们的APP仍然需要改进,比如接收消息可以加上语音提示,
添加聊天记录保存功能,
添加共享音频图片文件功能,这个小 APP距离微信这些聊天工具还有很大的上升空间。
通过此次实验,我们了解了蓝牙客户端服务器计时器等非可视组件的相关功能, 对两个 角色的
切换有了更深刻的认识, 虽然程序是参照网上的例程, 但是收获良多, 希望以后有更 多这样的机会。
木琴
实验目的
使用单一的声音组件来播放不同的音频文件,使用Clock组件来计算并实现两个音符之间的延迟, 在
创建一个过程时做判断,创建能够自我调节的过程;学习列表的高级应用,包 括添加、删除及读取项。
如图,这个应用可以做到:
1.通过触摸屏幕上的彩色按钮播放八个不同的音符;
2.按“播放”按钮,回放之前弹奏的音符;
3.按“重置”按钮清除之前弹过的音符,以便输入新曲。
图1木琴的用户界面
实验过程
一、设计组件创建键盘 用户界面中包含了低音C到高音C的打掉五声(七音符)音阶的八个音符键盘,本节 将创建这样的音乐键盘。
首先创建前八个木琴键,用按扭来实现,设置Text属性,Width属性,Hight属性,
BackgroundColor属性,使其效果如图2,
图2组件设计
添加Sound组件
我们要弹奏美妙的音符,就需要创建一个声音组件,设置最小间隔属性为 0,这个不要忘记咯,是为了弹奏要多快有多快,我已开始没有设,默认值是半秒钟,就会有很大延迟。
下载1.wav到8.wav,并加载到项目。
声音与按钮的连接
Button1被点击时,播放1.wav,切换到编辑块,这时候如果能有一个调用的过程会更加方便,然后当每一个按钮被点击是,就调用过程,播放对应的音频。则进行如下设置
图3创建过程来演奏
仅仅这样在测试时会失望,第一次按键时会出现错误。 因为系统是在程序运行后才加载声音,这个过程需
要时间。所以我们需要在程序启动时立刻加载声音。
图4应用启动时加载声音经过这些步骤我们就可以弹奏出一些简单的曲子了!记录并回放音符为了实现回放功能,需要记录弹奏的音符并加以保存。 除了要记录弹奏的音高(声音文件) , 还要记录
两个音符之间的时间长度。
我们需要维护两个列表,每弹奏一个音符,两个列表中都会各自添加一条记录:notes:包含与演奏的音符相对应的声音文件名,按照演奏顺序排列;
times:记录音符演奏时的时间点。
我们可以从Clock组件中得到计时信息,因此也可以用来正确地设定音符的回放速度。
添加组件
在设计器中添加一个Clock组件及"播放”和"重置”按钮,按钮放在HorizontalArrangement
中。
记录音符及时间
回到块编辑器中, | 为组件添加正确的行为。 | 我们需要维护两个列表:notes与times,每次用 |
户按下一个按
钮,就向列表中添加一项:
1.从Variables抽屉中拖出一个initializeglobal name to块来定义一个新的变量;2.单击“name”将变量命名为"notes”;
3.打开Lists抽屉,拖动一个makea list块,将其放置在变量 notes的插槽中;
这样就定义了一个名为 "notes”的空列表。重复上述步骤定义另一个变量,块的样子
图5创建列表
块的功能
命名为“times”。
每演奏一个音符,需要保存两项数据:声音文件名(保存到 notes列表),以及演奏瞬间的
时刻(保存到
times列表)。用Clock1.Now块来记录时刻,它返回当前时刻的时间值(例如, 2011年3月
12日上午8时
33分14秒),精确到毫秒。这些数据可以通过别被添加到
notes及times列表中,如图 5所示。
「引定义过程 Playnote
执行语句i
Sound1.Source和Clock1.Now块获得,将分
| ntier | 工 |
・
| global notes | 负 | |
| 酒加列表项列表 | global tim.es | | |
item |
| |
调用魁・播放 |
图6将演奏声音添加到列表中
当用户按下“重置”按钮时,我们希望清空这两个列表。化,因此添加
由于用户看不到清空带来的任何变
一个Sound1.Vibrate块,通过振动来告知用户按键生效了,这种设置对用户来说是非常友好的。图9-12显
示了这一功能用到的块。
图9-12为用户的“重置”操作提供反馈
音符的回放
作为一个思想实验, | 先来考虑如何实现音符的回放,而暂时忽略回放速度。 | 我们可以(但不 |
会)通过创建
图9-13中的那块来实现这个暂时的目标:
块的功能
这是计算机科学中一个非常重要的概念:强大的递归。
为了更好地了解递归的工作原理,我们来一步一步地探究, 当用户演奏了三个音符 (1.wav、
3.wav和6.wav),然后按下"播放”按钮时,都发生了什么。中是否保存了音符:
PlayButton .Click首先判断列表
由于notes列表长度3>0,列表不空,因此设定 count等于1,并调用PlayBackNote:1. 在第一次调用 PlayBackNote 时, count= 1 :
Sound1.Source被设置为在 notes中的第1项,即1.wav;
调用 Sound1.Play,播放 1.wav;
由于 count 值(1)小于 notes 的长度(3),因此 count 递增为 2,并再次调用 PlayBackNote;2. 第二次调用 PlayBackNote 时, count=2:
Sound1.Source被设置为notes中的第2项,即3.wav;
调用 Sound1.Play,播放 3.wav;
由于count (2)小于notes的长度(3),因此count递增为3,并再次调用 PlayBackNote; 3. 第三次调用 PlayBackNote 时, count=3:
App Inventor 编程实例及指南
本文档使用 看云 构建 - 1 -
Sound1.Source 被设置为 notes 中的第 3 项,即 6.wav;
调用 Sound1.Play,播放 6.wav;
由于count (3)不小于notes的长度(3),因此跳出if块,回放结束。
实验结果
实现木琴弹奏,回放,重置的功能。
改进
下面是一些可供探讨的备选方案: 目前,在回放过程中,没有对用户点击 ResetButton 做任何,这将
导致程序的崩溃
(错误提示: select list item: Attempt to get item number 4 of a list of lengh 0 。)修改 PlayButt on
.Click,让ResetButt on在回放期间禁用,回放完成后再重新启用。将 PlayBackNote中的if块改为ifelse块,并在"else”中重新启用 ResetButton。
类似问题也发生在 PlayButton 上,用户可以在回放过程中再次点击该按钮。 (想象一下 会发生什么。)在PlayButt on .Click中禁用PlayButton,并将其Text属性改为"播放中 ”, 并像ResetButton —样,在 PlayBackNote的ifelse块中重新启用该按钮,并重置 Text属性。
实验感想
编写一个能自我调用的过程不仅是可能的, 有时也是必要的。 这种强大的技术称为递归。 在编写递归
过程时, 一定要确保为程序的退出设定一个基本条件, 它的重要性远大于为自我 调用设定条件,否则程序
将陷入无限循环。
本实验加深了我对列表的认识,列表(Lists)可以为程序提供存储功能,可以在列表中
保存用户的操作记录, 并在以后对存储内容进行提取和再处理。 经过老师建议, 我将按键调 整到适合弹奏
的排列方式,还将按键播放声音的延迟取消,从而可以加快弹奏速度。
这三个实验让我们对 MIT APP Inventor 这个平台有了基本的认识,并领略到程序的魅 力,对经后的
学习更加感兴趣。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务