第07讲:自动回复短信(下)
注意:
1、今天开始,App Inventor 网址改成127.0.0.1:8888
2、启动 App Inventor前必须先启动两个文件,且不能关闭这两个启动的文件,可以最小化。这两个文件在电脑桌面上,截图如下:
学习目标
1、会使用Texting组件的收发短信功能;
2、能用TextBox组件提交自定义回复信息(需要与Button组件配合使用);
3、能用Screen.Initialize事件在应用启动时加载自定义回复
学习重点:会使用Texting组件的收发短信功能。
学习难点:会使用Texting组件的收发短信功能。
这节课我们一起开发一个“自动回复短信”程序,具体需要实现如下功能:
1、【基本任务】能够自动回复收到的短信;
2、【拓展任务】可以大声朗读来信内容;
3、【拓展任务】回复内容可以包含您当前的位置信息。比如如果你的家人正在家做晚饭,他或她可能想知道你何时能到家,但又担心回短信会危及安全。
一、知识回顾,分析下面程序代码实现的功能。
二、动手实践
1、大声读出收到的短信
修改应用:收到短信后,手机将大声朗读发送者的电话号码以及短信内容。开车收到短信,虽然有自动回复功能,但你还是禁不住想知道短信的内容。使用text-to-speech功能,就可以手不离方向盘而收听到短信的内容。
1、需要在你手机上完成一项设置,即:在手机的"设置->辅助功能"中打开"文字转换语音输出"功能,根据需要设置默认语言及语速,然后选择"收听示例"。如果没听到任何声音,请确认手机音量已调高;还可以更改TTS引擎默认属性设置,来改变声音效果。
2、 在界面设计上添加一个组件,具体见下表:
组件类型 | 面板中分组 | 命名 | 作用 |
---|---|---|---|
TextToSpeech | Media | TextToSpeech1 | 大声朗读来信 |
3、需要加入下表中所列出的块来扩展该事件的处理程序。
块的类型 | 所在抽屉 | 功能 |
---|---|---|
TextToSpeech1.Speak | TextToSpeech1 | 大声读出收到的短信 |
join | Text | 连接生成将被朗读的文字 |
"SMS text received from" | Text | 被读出的第一段话 |
get number | Variables | 获得短信发送者的电话号码 |
". The message is" | Text | 在读完电话号码之后稍加停顿,然后说"The message is" |
get messageText | Variables | 获得收到的短信文本 |
4、具体代码如下:
2、在回复中加入位置信息
拓像Facebook的Places以及Google的
Latitude等类型的应用,都是利用GPS信息来帮助人们跟踪彼此的位置信息。这样的应用最令人担忧的是隐私问题,原因之一是它引发了人们对"老大
哥"的恐惧,这里的"老大哥"指的是那些设法跟踪其公民下落的集权政府。但是使用位置信息的应用的确非常有用,试想一个迷路的小孩,或者那些在森林里迷路
的徒步旅行者。
在"骑车不发短信"的应用中,位置跟踪让回复的短信再多一点内容,而不只是"我正在骑车",回复的信息可以是这样的:"我正在北京东直门内大街209号骑车"。对于那些正在等待朋友或家人到来的人来说,这些额外的信息非常有益。
App Inventor提供了LocationSensor(位置传感器)组件,作为手机的GPS (Global Positioning
System全球定位系统)功能的接口。除了纬度和经度信息,LocationSensor也可以接入到谷歌地图,为人们提供当前位置的地址信息。
值得注意的是,LocationSensor并不总在读取信息,因此务必要恰当地使用这一组件。具体地讲,应用只对
LocationSensor.LocationChanged事件做出响应,而两种情况会触发LocationChanged事件:①当手机的位置传感
器第一次收到位置信息时;②随着手机的移动,产生新的位置信息时。下表列出所要用到的块,具体方法是:当LocationChanged事件触发时,将当
前地址信息保存到变量lastKnownLocation中,再将变量值插入到自动回复信息中。
块的类型 | 所在抽屉 | 功能 |
---|---|---|
Initialize global lastKnownLocation to | Variables | 创建一个变量来保存最后读取的地址信息 |
"未知" | Text | lastKnownLocation的默认值 |
LocationSensor1.LocationChanged | LocationSensor1 | 位置传感器第一次读到位置信息,或每次位置信息变化时触发该事件 |
set global lastKnownLocation to | Variables | 设置变量值,稍后会用到 |
LocationSensor1.CurrentAddress | LocationSensor1 | 当前地址信息,如:"北京市东城区东直门内大街209号" |
join | Text | 多段文本的连接器 |
ResponseLabel.Text | ResponseLabel | 不包含位置信息的定制回复信息 |
“我最后的位置在:” | Text | 原定制信息之后的位置信息提示词 |
global lastKnownLocation | Variables | 地址信息,如:“北京市东城区东直门内大街209号” |
具体代码如下:
知识小结
下面是本节课涉及到的一些概念:
1、Texting组件:既可以用来发短信,也可以处理收到的信息。在调用Texting.SendMessage之前,需要为Texting组件设置
PhoneNumber及Message属性。为了回复收到的短信,需要为Texting.MessageReceived事件编写处理程序;
2、TinyDB组件:用于将信息永久存储在手机数据库中,以便每次应用启动时都可以加载保存过的数据。有关TinyDB的更多信息,请参见第22章;
3、TextToSpeech组件:对于所提供的任何文本对象,都可以大声朗读出来;
4、join块:用于将若干片段的文字拼凑(或连接)成单一的文本对象中;
5、LocationSensor组件:可以报告手机的纬度、经度及当前