`
tubaluer
  • 浏览: 1440371 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

WCF 实例 —— Android 短信助手 (WCF + Android) (2)

 
阅读更多

[Android端源码下载]
前面一篇重点介绍了服务端的代码,接下来说明下Android客户端的代码,先上张图,客户端的功能组合一目了然。


1) 准备:
android里对于应用的权限控制有着严格的限制,因此根据不同的使用目的,需要在 AndroidManifest.xml 里添加用户权限(uses-permission)。在这个应用里使用了Internet访问,读取短信,发送短信,查询联系人4个主要的功能,所以提前添加下面4个权限:

2) Android Http交互

Http交互当然首选org.apache.http下强大的HttpClient 类,这里先包装下封装了基本的调用方法 —— doGet 和 doPost
其中 doPost 传入 Xml/Json 字符串,按照指定的 ContentType 发出请求。

3) Android Timer 的使用:(下面的代码并非实际顺序,整体代码看最后贴出来的代码)
在这个小程序里,启动后点击Button启动Timer,然后再次点击则关闭Timer(Timer.cancel)。
android timer 需要设定它的schedule,下面代码中 schedule传入的是一个 TimerTask 匿名类,它重写了run()方法。
相当于.net里的 Tick 事件处理方法。
【功能说明】在Timer中调用 doGet 方法,从WCF服务端取要发送的短信,利用SmsManager发送短信并记录LOG呈现在UI上。

和.net一样,在Timer(线程)里不能直接对UI进行操作,需要向Handler 发消息,让 Handler 通过重写handleMessage() 方法实现对UI的更新。Timer里new一个Message,再放入一个Bundle对象,Bundle就像个容器放什么都可以。而Message.what(int型)可以利用来做标志位。

4) Android 的短信拦截
android中当系统收到短信会对所有应用发出广播,通过注册BroadcastReceiver的实例再重写onReceive方法就可以收听到收到的短信。(Tip:利用java中内部类可以访问外部类实例成员的特性(C#中不能),可以简化不少编码量,下面的代码中直接调用了mHandler类成员)
【功能说明】当收到一条短信则调用 doPost 方法将短信发送给WCF服务端,并记录LOG呈现在UI上。


5) Android 中的Json序列化和反序列化
在上面两段代码中(Timer和Receiver),可以看到Json的序列化和反序列化的代码:
5-1) 序列化成json字符串:

5-2) 反序列化成字典:


6) 联系人查询
这里使用的是 Activity.managedQuery() 方法,网上的说明很多了这里不一一累述。

吼吼,客户端也介绍完了。再分享一些测试心得,希望能帮助到和我一样的新手们:)
7) android测试经验分享
(1) android 模拟器每次启动都很耗时,但实际不用每次都启动。修改代码保存后断开和模拟器的连接,修改后再Debug启动就可以了。
(2) 短信/电话拨打测试使用 telnet(windows7需要先在windows组件中安装telnet组件)。然后就可以按照如下进行短信测试了。
cmd > telnet localhost 5554
sms send <PhoneNo> <content>


(3) 利用 LogCat 帮助你快速发现bug。log4j,log4net大家都很常用了,在android下提供了更方便更容易查看的工具LogCat。工具类——android.util.Log(详细看这里:图解LogCat的用法)
(4) 发布测试,有时候我们常常要发布到真机上看看真实的效果,可以在真机上安装一个FTPServer,这样release之后直接copy到机器上,安装就很方便了。另外自己准备一个key文件,每次发布都用一个key可以保证覆盖安装。

最后贴上完整代码:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics