Touch Diamond DIY —— 自己动手 丰衣足食

自从迷上了网球,不仅运动量增加了,饭量也随之上涨。都说程序员是严重缺乏锻炼的群体,不过说实话,平时多锻炼锻炼,感觉这一天精气神都很充足。

最近经不住好友的怂恿,投了点儿资搞了一身行头和装备,场地不用花钱,小区旁边大学生公寓内就有个不错的网球场。学生打网球的不多,只是偶尔有人在那里打打羽毛球,所以一般不用担心场地被占。

说实话,我打网球纯属瞎打,毫无战略不讲技巧,过网不出界就行,不求输赢,重在参与嘛!不过毕竟不是职业选手,所以打起来总是有些牵挂,比如手机怎么办?揣着吧碍事,放一边吧容易漏接电话,总能再骗个朋友来观战,实际上是让人家帮我接电话吧。

熟悉Windows Mobile的朋友肯定会帮我列举出一大堆能解决我的烦恼的软件来,如来电精灵、QCellCore之类的,但是说实话,这些软件太通用。越通用就越容易变得庞大,而我喜欢简约风格、小而专的软件,尤其是在Windows Mobile这样的平台上。

求人不如求己,毛主席说过:“自己动手,丰衣足食。”好歹我也是个程序员,怎么能抱着一身手艺饿死了呢?说干就干!虽然我不是Windows Mobile开发人员,但是临时抱佛脚开始一些小功能还是不在话下的。

首先想想我需要什么样的功能。很简单,其实就是在我打网球或者忙别的事情的时候,接到来电,手机会自动挂断,并且告诉对方我正在忙,暂时不能接听电话。虽然手机本身会存储未接来电,但我自己就是个给对方打电话老没人接就会很担心的人,己所不欲,勿施于人。我浏览了Touch Diamond自带的相关功能,有一个“用文字信息拒绝来电”的功能,但是还是不太符合我的需求,因为前提是拒绝来电,手机才会给对方发送短信,可是打网球时手机根本不在我手上,我要的就是它自己搞定一切。需求明确了:自动挂断、自动发送短信、保留来电列表。

打开Visual Studio 2008,创建一个新的智能设备项目,其实开发方式跟普通的Windows Forms没有太大的区别,就是内容变点儿花样而已。

首先创建一个Microsoft.WindowsMobile.Status.SystemState对象,并且注册它的Changed事件以监听手机状态,如果状态是来电(Microsoft.WindowsMobile.Status.SystemState.PhoneIncomingCall)的话,程序就开始工作。首先记录下来电的电话号码,显示在主界面的列表里,然后挂断电话。我目前采用的挂断电话的方式是模拟一次End键点击操作,代码如下(这样的代码在网上随处可见):

   1: using System.Runtime.InteropServices;
   2:  
   3: namespace Autumoon.WindowsMobile6.PhoneBuddy
   4: {
   5:     public static class Keyboard
   6:     {
   7:         // Use keybd_event API to send click message to system.
   8:         [DllImport("coredll.dll")]
   9:         public static extern void keybd_event(
  10:             byte bVk,
  11:             byte bScan,
  12:             int dwFlags,
  13:         int dwExtraInfo);
  14:     }
  15:  
  16:     public sealed class VirtualKey
  17:     {
  18:         // The VK value of End button is F4.
  19:         private const int VK_F4 = 0x73;
  20:         private const int KEYEVENTF_KEYUP = 0x0002;
  21:  
  22:         /// <summary>
  23:         /// Simulate one click operation.
  24:         /// </summary>
  25:         internal static void DropCall()
  26:         {
  27:             Keyboard.keybd_event(VK_F4, 0, 0, 0);
  28:             Keyboard.keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0);
  29:         }
  30:     }
  31: }

挂断电话之后,出于礼貌也为了不让VIP人物(父母、密友、债权人等)担心着急,有必要发送一条留言性质的短信,短信的内容可以定制(目前暂不支持彩信),默认信息是“Sorry, I’m busy now.”。短信的发送非常简单,.NET Compact Framework提供了Microsoft.WindowsMobile.PocketOutlook.SmsMessage类,只要填写好了必要的信息就可以通过SmsMessage的Send()方法把短信发送出去了。

几番调试之后,功能虽然很小,但却很实用,不用去购买专业级的来电管理软件,我就已经通过自己的劳动使自己可以心无杂念地驰骋在网球场上(不好意思,太夸张了:))!

总结一下,Windows Mobile平台对于开发人员来说就是易于开发,优秀的开发工具与丰富的开发资源以及易于上手的运行平台可以大量地节省开发时间、提高效率。对于像我这样的非专业移动开发人员来说,我不需要像Hacker一样去hack去破解,然后晃晃我的手机说:“你瞧,它可以这么工作了!”我只想通过几行代码就能扩展它的功能和应用,哪怕是很简单的功能,但却为我的生活和工作带来了极大的便利,谁希望每打几个球就扯着嗓子喊:“喂,张三,帮我看看我的手机有没有电话。”呢?

接下来,等我有空了,我争取花点儿时间把这个软件的功能再完善一下,并且,我很乐意和大家分享我的劳动成果!哦对了,我给它起了个名字:Phone Buddy

Phone Buddy for Windows Mobile 6

posted @ 2008-07-08 21:06  麦机长  阅读(1647)  评论(6编辑  收藏  举报