智能手机已经成为生活中不可或缺的一部分。它们不仅仅是通讯工具,还充当着日程安排者、提醒器、组织者、文件共享者、个性化音乐系统等角色。作为一名手机爱好者,曾经是诺基亚(Symbian OS)的粉丝,而现在成为了Windows Mobile的忠实拥趸。
作为一名Windows开发者,拥有一部Windows Mobile手机意味着可以利用.NET编程技能,为手机创建个性化的应用程序。
经常忘记亲友的生日,因此经常遭到妻子的责备和朋友的嘲笑。为了克服这个问题,开发了这个工具来帮助自己。
这个工具会在手机上扫描一个包含人们信息的应用程序数据库,查找与当前日期匹配的生日。如果找到匹配项,代码会自动向那个人的手机号码以及手机发送短信提醒。这样一来,就不需要记住任何生日,只需一次性输入应用程序,剩下的就交给代码来处理。
需要一部支持.NETCompact Framework (.NET CF) 3.0和SQL Server CE(Compact Edition)的手机。Windows Mobile 6.0及以上版本默认支持这些功能。对于Symbian手机,可以从Red Five Labs获取.NET CF,但最近他们的网站似乎无法访问,可能需要通过Google搜索来找到下载资源。
需要明确安装在手机上的文件列表如下:
这些文件可以在SQL Server 2005 CE文件夹中找到。
对于开发,需要Visual Studio 2005/2008 IDE和Smartphone开发SDK。可以从以下网址下载:
设计用户界面相对简单,只需要一点创意。手机屏幕相对较小,因此使用标签控制很有用,可以将功能分隔到多个标签中,使屏幕看起来不那么拥挤。
将展示在应用程序中使用的用户界面图片,可以根据自己的喜好进行定制。
要创建移动应用程序,打开Visual Studio 2005/2008并创建一个新项目。这将打开一个新项目窗口。选择偏好的语言下的Smart Device。
点击OK后,将进一步打开一个屏幕,用于选择智能手机平台类型。
在这里选择“Device Application”。
这里可以查看每条记录的详细信息。暂时忽略“Stop the Timer”按钮,稍后会解释。
在屏幕上显示所有记录。
这个屏幕显示一个文本框,其中包含将自动发送给寿星的消息。
在遭受妻子的严厉批评后,应该为劳动成果获得一些赞誉。
这里没有复杂的技术内容,以下是步骤说明:
准备表结构。打开SQL Server Management Studio并创建一个新表。它将保存数据库到选择的位置,并带有SDF扩展名。例如:
abc.sdf
字段“sno”是自动生成的主键。
将这个新创建的表添加到应用程序中。添加数据库时,会提示创建DataSet。继续创建它。这将为项目添加DataSet Table Adapter和绑定源。
一切准备就绪,现在可以开始了。Table Adapter非常有用,因为它简化了执行DML(数据操作语言)任务,例如,要删除一条记录,只需要编写以下代码:
VB.NET
BirthDayInfoTableAdapter.Delete(<要删除的主键值>)
BirthDayInfoTableAdapter.Fill(BirthDayInfoDataSet.BirthDayInfo)
在上面的代码中,首先删除记录,然后重新填充数据集(相当于刷新数据集)。
检查生日的主要代码是:
VB.NET
For i = 0 To BirthDayInfoDataSet.BirthDayInfo.Rows.Count - 1
If BirthDayInfoDataSet.BirthDayInfo(i).dateOfBirth.Day = Date.Now.Day And _
BirthDayInfoDataSet.BirthDayInfo(i).dateOfBirth.Month = Date.Now.Month Then
Dim sms As New SmsMessage(BirthDayInfoDataSet.BirthDayInfo(i).mobileNumber, _
"Hi " & BirthDayInfoDataSet.BirthDayInfo(i).fullName & vbCrLf & txtMessage.Text)
sms.Send()
Dim sms2 As New SmsMessage("mobile number", _
"Hi " & BirthDayInfoDataSet.BirthDayInfo(i).fullName & vbCrLf & txtMessage.Text)
sms2.Send()
End If
Next
如果匹配,所有生日和月份都存储在表中,与当前日期和月份进行匹配。如果匹配,发送短信,否则跳过。
SmsMessage是用于发送消息的内置库。