前两天回家了,闲来无事。想起某同学曾抱怨自己的windows mobile系统连看pm2.5的软件都下不到,就做了一个wm上的监视“空气质量指数”的小软件。
找不到wm的真机、之前也没接触过智能手机开发,只好全凭意念了。。
网上查了wm开发的资料,vm的应用分为托管(用.net framework)和原生(用VC)两种,没有怎么接触过VC,于是用托管吧,执行效率差一点,但是开发方便。
如下是这两天工作的小结。
[转载引用请注明原文:http://blog.csdn.net/bhq2010/article/details/8564885]
1. 安装开发环境
操作系统windows 7 sp1 32位旗舰版
需要安装的软件是Visual studio2008(我的win7装不上vs2010...)和Microsoft Virtual PC。如果需要在PC和仿真器之间同步数据的话,还需要安装Microsoft ActiveSync,但是这个在win7上貌似不太好装。
vs我装的是中文专业版
Virtual PC的下载地址是http://www.microsoft.com/en-us/download/details.aspx?id=4580
2. 设置仿真器
打开vs,菜单栏->工具->设备仿真器管理器
右击需要的仿真器,选择“连接”打开仿真器,在仿真器的菜单栏->文件->配置
在常规选项卡下的共享文件夹可以设置为win7上的一个目录,这样在仿真器中的资源管理器->sd card中就可以看到这个目录下的文件夹了。
在网络选项卡中选择“启用NE2000 PCMCIA网络适配器并绑定到”并将下面的下拉框选择到当前win7上网的那个网络或者“连接的网卡”,点击确定。
在仿真器的wm中,开始->设置->连接->网卡,在“我的网卡连接到”中选择“默认Internet设置”,在下方选择“NE2000兼容Ethernet驱动程序”设置ip和dns,一路ok,然后点击仿真器菜单栏->文件->保存状态并退出。
重新打开仿真器,应该就可以上网了,参考http://www.weste.net/2009/6-19/1527076726
3. 开发程序
打开vs,菜单栏->文件->新建->项目->Visual C#->智能设备->智能设备项目,之后就和开发普通的windows form程序一样了,.net framework最好选择2.0,因为高版本的在低版本的windows mobile系统中不支持。
写好后,启动调试,选择刚才配置好的那个仿真器,然后就会将开发的程序部署到仿真器中进行调试,仿真器的速度稍微有点慢。
4. http访问
try { string url = urlBase + city; WebRequest req = WebRequest.Create(url); WebResponse result = req.GetResponse(); Stream ReceiveStream = result.GetResponseStream(); //read the stream into a string StreamReader sr = new StreamReader(ReceiveStream); sr.ReadLine(); label_City.Text = sr.ReadLine(); label_AQI.Text = sr.ReadLine(); int aqi = Int32.Parse(label_AQI.Text); if (aqi <= 0) { label_AQI.Text = "--"; } label_AQI.ForeColor = Common.getGradeColor(aqi); label_Grade.Text = Common.getGrade(aqi); label_GradeName.Text = Common.getGradeName(aqi); label_PM25H.Text = sr.ReadLine(); label_PM25D.Text = sr.ReadLine(); int stationNum = Int32.Parse(sr.ReadLine()); Common.stationDataList.Clear(); while ((stationNum--) > 0) { StationData data = new StationData(); data.setStationName(sr.ReadLine()); data.setAQI(Int32.Parse(sr.ReadLine())); data.setPm25h(Double.Parse(sr.ReadLine())); data.setPm25d(Double.Parse(sr.ReadLine())); Common.stationDataList.Add(data); } label_MaxTemp.Text = sr.ReadLine(); label_MinTemp.Text = sr.ReadLine(); label_Weather.Text = sr.ReadLine(); sr.ReadLine(); label_Tips.Text = sr.ReadLine(); if (result != null) { result.Close(); } } catch (Exception e) { MessageBox.Show("服务器暂无响应:" + e.Message); }