安安的通讯助手行为编辑
(1)自动回复短信
通讯小助手会监听短信到达事件,一但有收到新的短信,就会根据设置进行自动回复。有关的短信的接收和发送功能在App Inventor中已经封装成为“短信收发器”组件,归于“社交应用”组中。 短信收发器组件的属性如图7.3所示,有四个属性。其中“启用消息接收”有三种选项,如设置为关闭接收,就不会接收短消息。其他两种在程序运行的时候可以接收消息。如果设为前台接收,那么在程序没有运行在前台时,短信将被忽略。如果设为总是接收,即使程序运行在后台时也能接收并处理短信。短信属性标识的是要发送的短信内容,电话号码属性值为被发送的目标电话号码。
当监测到有新的短信接收到时,会激发“收到消息”事件。如果需要对收到消息事件进行处理,则可以在“收到消息”事件处理器中编写处理代码模块。 (3)动态加载列表选择框元素
当用户点击“已收短信电话列表”时,会转入电话列表的屏幕,这个其实是通过列表选择框组件来实现这个效果的。列表选择框组件属于“用户界面”组,它的外形和按钮组件类似,但点击后的响应不同。列表选择框有一个“元素字串”属性,在这个属性中填入的字符串的格式如下“单元项1,单元项2,单元项3”,每个单元项通过英文标点符号分号“,”分割开来。点击后显示效果如图7-6所示。
(4)拨打电话
当用户选择某个电话号码后,就可以直接拨打这个电话号码了。类似于“短信收发器”组件,App Inventor提供了同属于设计应用组的“电话拨号器”组件,通过调用“电话拨号器”组件的“拨打电话”方法可以方便地实现拨打电话的功能。在调用“拨打电话”方法之前,必须先设置好目标电话号码,即把电话拨号器的电话号码设置为列表选择框中选中的那一项。因为列表选择框中还存在一个值为“电话号码”的标题栏,所以要把选中这一项时排除在外。具体实现如图7-8所示。
把全局变量“电话号码列表”的值设置为只有一个单元项的列表。另外,已收短信信息的文本也被重设置为最初的表头信息内容。
(8)存储自动回复的内容
当用户在文本框中修改了自动回复的内容后,当收到新的短信时将会把修改后的文本框内容作为回复内容发送出去。但当这个App被关闭后再打开,那么上次的修改内容将被丢失,文本框的内容仍然是最初在做组件设计时填入文本输入框的文本属性值。这种情况对大多数用户来说感觉都不会很好,因为个性化的回复内容无法持久保存,每次重启软件的时候都会丢失。
为了解决这个问题,需要实现数据的持久化存储,把修改后的回复内容保存起来,然后每次启动App时就把上次保存的最新内容提取出来,显示在回复的文本框中。
App Inventor中提供了多种方式实现数据存储,在组件面板里有数据存储的组别,如图7-11所示。包括四种组件:微数据库、FusiontablesControl、文件管理器、网络微数据库。在本例中先通过“微数据库”组件来实现回复内容的持久化存储。 (9)完善初始化工作
在完成以上功能后,即使用户保存了修改后的自动回复信息,但当App重新启动后,文本框中显示的仍然是设计时预设的信息,因为并没有在App启动时把以前存储的回复内容读取并显示在文本框中。因此还需要做一些小小的完善功能,即:在屏幕初始化时去读取并设置文本框的文本内容。具体实现代码如图7-13所示。 在微数据库组件的“获取数值”方法中有2个输入参数槽,一个是标签,通过这个标签的值来查找相应存储的数值。还有一个是无标签时的返回值,如果找不到该标签(即:没有关联到该标签的数字),可以把这个参数的值作为结果返回。在本例App中,如果以前用户没有存储过自动回复内容,那么在调用微数据库的“获取数值”时是找不到“短信回复”这个标签的,那么就用无标签时返回值参数所提供的值赋给回复信息的文本输入框。如果能找到“短信回复”标签,那说明以前已经存储过新的自动回复的内容,则把查找出来的值赋给回复信息的文本输入框。