`
kerlubasola
  • 浏览: 709689 次
文章分类
社区版块
存档分类
最新评论

WAP PUSH解析(3)——Android中实现

 
阅读更多

田海立@CSDN

2012-06-30

Android中已经实现了SMS PDU的解析、WSP的解析,得到了WBXML封装的数据,并发出了广播"android.provider.Telephony.WAP_PUSH_RECEIVED"。原生实现中还没有对mimeType类型为WAP PUSH SI 和WAP PUSH SL 的该广播的响应,亦即,缺少对WBXML封装的PUSH数据的处理。本文通过分析总结Android中的原生实现,给出WAP PUSH SI/SL的实现参考。

一、Android中的原生实现


笔者已经有几篇文章分别描述SMS的接收处理过程,SMS PDU / WSP / WBXML的封装格式。

这里总结一下:

  1. RIL中收到new SMS,调用android.telephony.SmsMessage.newFromCMT() decode PDU,结果放入SmsMessage中。android.telephony.SmsMessage.newFromCMT() 根据电话的类型,用com.android.internal.telephony.gsm.SmsMessage或com.android.internal.telephony.cdma.SmsMessage的newFromCMT()真正的实现PDU decode;
  2. 执行SmsDispatcher (具体实现类GsmSmsDispatcher /CdmaSmsDispatcher)的dispatchMessage()分发消息msg。有目标端口且目标端口是WAP PUSH(SmsHeader.PORT_WAP_PUSH)的信息,用WapPushOverSms::dispatchWapPdu()来处理;
  3. WapPushOverSms::dispatchWapPdu()中解析WSP,得到对应ContentType的MIME Type:Service Indication (SI)为"application/vnd.wap.sic";Service Load (SL)为"application/vnd.wap.slc"。对SI和SL类型,调用dispatchWapPdu_default()。

下面是dispatchWapPdu_default()的实现:


以上都是在Framework中处理的,可以看到Framework中已经解析出了SI/SL的WBXML封装的数据,并通过Broadcast广播出去了。接下来,对mimeType标识的具体业务的处理,是application层的工作。而对mimeType为"application/vnd.wap.sic"(SI)和"application/vnd.wap.slc"(SL)的WAP_PUSH_RECEIVED的处理,Android的原生实现中没有实现。

关注一下发出广播的Intent参数:

  • mimeType: “application/vnd.wap.sic"或 application/vnd.wap.slc";
  • header: WSP解析出来的header,用来识别ContentType的,已经有了mimeType,这个已经没什么意义;
  • data: WBXML封装的SI或SL XML数据。

要实现完整的WAP PUSH,只要:

  • 实现mimeType为"application/vnd.wap.sic"(SI)和"application/vnd.wap.slc"(SL)的WAP_PUSH_RECEIVED的处理;
  • 收到的广播中实现对WBXML封装的SI/SL解析,并插入消息库。

可参考MMS中对"application/vnd.wap.mms-message"(MMS)类型的WAP_PUSH_RECEIVED处理的实现。

二、处理"android.provider.Telephony.WAP_PUSH_RECEIVED"

要处理"android.provider.Telephony.WAP_PUSH_RECEIVED",定义BroardcastReceiver实现类WapPushReceiver,并在AndroidManifest.xml中加入对"application/vnd.wap.sic"(SI)和"application/vnd.wap.slc"(SL)类型的WAP_PUSH_RECEIVED处理的声明。


三、WapPushReceiver中对WBXML解析


可参考原生实现中MMS中PushReceiver的处理,做如下实现:

  1. WapPushReceiver的onReceive()通过Intent的“data“参数,获取WBXML封装的PushData;
  2. 启动一个AsyncTask在后台解析WBXML封装的PushData,解析出PushData (XML格式);
  3. 解析XML格式的PushData,得到URL/Content/Signal等信息;
  4. 根据3的结果,选择加入Message数据库,并通知用户。

这里面关键点是WBXML格式的解析,可以参考MIUI ROM接收WAP PUSH短信的补丁。这是为小米手机做的WAP PUSH解析实现,里面有WBXML解析的源代码可参考。不过这里面对WBXML中定义的TAG和Attribute的支持不全,读者可根据自己需求加入所需要的支持。

参考资料

1.Google Android source2.3.7_r1

Android原生实现源代码

2.WAP Binary XMLContent Format

WBXML标准,必看!

3.MIUI ROM接收WAP PUSH短信的补丁

Android上的WAPPUSH解析实现,有源代码,但是解析不全。

4.WAP Push over SMS

WAP PUSH over SMS的大致介绍(英文)

5.WAP Push SMS encoding

WAP PUSH Service Indication封装实例(英文)

6.Sending SMS WAPPush messages using the ActiveXperts SMSand MMS Toolkit

发送WAP PUSH的工具。是使用说明,虽然没实现细节,但可参考WBXML的Token和Attribute对照。(英文)

分享到:
评论

相关推荐

    Android中WAP PUSH的实现分析

    这篇博客文章可能详细探讨了如何在Android环境中实现这一功能,虽然具体的描述为空,但我们可以根据标题推测出一些关键知识点。 1. **WAP协议**:WAP是无线应用协议,旨在为移动设备提供一种访问互联网内容的方式。...

    wappush.rar_WAPpush_java push_push_wap push_wap push java

    在Java环境中实现WAP Push,通常会用到JSP作为服务器端的动态网页技术,以及JavaBean作为可重用的组件。JSP可以处理HTTP请求,生成推送消息,并通过JavaBean来封装业务逻辑和数据。 3. **JSP(Java Server Pages)...

    Android wappush讲解

    ### Android WAPPush详解 #### 一、基本概念与应用场景 **WAPPush**是一种能够将特定站点或业务的链接通过短信形式发送到支持WAPPush功能手机的技术。这项技术的核心价值在于它能够极大地简化用户查找和访问所需...

    android add wap push添加wap push功能

    在Android系统中,实现WAP Push功能可以让应用程序接收并处理这些推送信息,提升用户体验。 **一、WAP Push的基本原理** WAP Push基于HTTP或WAP协议,通常包含两个主要部分:PUSH Proxy Gateway (PPG) 和终端设备...

    Android 短信、WapPush拦截

    但是针对不同的手机厂家的android系统(略有不同),有的拦截就不成功了。 一般情况下,使用较标准的Google的android系统,拦截比较成功(例如:摩托罗拉)。 如果手机厂商做了较大的改动,拦截可能会有问题。 例如...

    WAPpush.zip_WAPpush_java wap_java wap push_push_wap push

    在“e3.war”文件中,很可能包含了实现上述功能的Java代码,可能包括解析和创建WAP Push消息、与PUSH代理服务器交互、处理设备响应等功能。而“www.pudn.com.txt”可能是相关文档或说明,帮助理解源码的使用和部署。...

    wappush.zip_WAPpush_wappush asp

    标题中的“wappush.zip_WAPpush_wappush asp”揭示了这是一个关于WAP Push技术的ASP(Active Server Pages)实现。WAP Push是一种在无线应用协议(WAP)框架下,允许服务器向移动设备推送信息的技术。这种技术常见于...

    WAPPush.rar_TAO_WML_push_wap push_wappush.rar

    标题中的"WAPPush.rar_TAO_WML_push_wap push_wappush.rar"表明这是一个关于WAP Push技术的压缩文件,其中包含了与TAO(可能是一个人名或项目名称)相关的资料,以及WML(Wireless Markup Language)和WAP Push的...

    C#实现wap push发送

    在IT行业中,WAP Push(Wireless Application Protocol Push)是一种技术,它允许服务器将内容推送到移动设备上,而无需用户主动请求。这种技术通常用于发送短信、彩信或者更新服务,比如天气预报、新闻通知等。在本...

    wap_push.rar_WAP push java_push_wap pu_wap push_wap源码

    在Java环境中实现WAP Push,主要是编写服务器端的推送服务和客户端的接收程序。服务器端需要构建一个可以生成符合WAP Push规范的消息格式,并能够通过HTTP或者WAP Gateway发送到目标设备的系统。客户端则需要监听...

    wappush.zip_WAPpush_push

    5. **编程与实现**:在Java中实现WAP Push服务,意味着使用Java的网络编程库,如Socket通信,以及可能的HTTP/HTTPS协议处理。可能还需要处理编码、解码WAP Push消息的协议栈,如WSP(无线会话协议)。 总结来说,...

    wap push 业务入门

    通过WAP Push,应用程序可以即时地将信息发送到用户的手机上,从而实现更加实时和高效的通信。诺基亚发布的这份WAP Push业务介绍文档,主要目的是帮助开发者理解WAP Push的工作原理以及如何利用这项技术来开发移动...

    用sms发mms、WAP PUSH等资料

    在技术实现上,发送MMS或WAP PUSH时,通常会涉及一系列步骤,包括内容编码、地址解析、网络连接建立、数据传输和错误处理等。对于开发者来说,理解这些机制有助于优化消息传递效率和用户体验。 总结起来,SMS、MMS...

    wap push 源码

    3. **HexDecoder.cs**: 这个文件可能包含了一个十六进制解码器,用于处理在WAP Push消息中可能遇到的十六进制编码的数据。在无线通信中,为了节省传输带宽,有时会使用十六进制表示数据。 4. **AssemblyInfo.cs**: ...

    实现WAP Push业务的两种方式的比较.pdf

    ### 实现WAP Push业务的两种方式的比较 #### 摘要 WAP Push(无线应用协议推送)作为一种在移动通信领域广泛应用的业务营销手段和技术承载方式,在推动信息和服务到达用户方面扮演着重要角色。当前,中国有两种主流...

    wap-push.rar_push_wap_wap push

    **标题解析:** "wap-push.rar" 这个文件名暗示了内容与WAP(Wireless Application Protocol,无线...通过阅读这个文档,读者应该能够理解WAP Push的机制、应用、优缺点,并了解如何在实际环境中实现和优化这一技术。

    android 开发 push 短信协议解析

    理解并实现Push短信协议解析是Android开发者提升应用交互性和实时性的关键技术之一。通过WAPPdu和WBXMLParser等工具,开发者可以有效地处理Push短信,从而为用户提供更高效、更流畅的使用体验。

    WapPush.rar_WAPpush_java cmpp wappush_sendmessagepdu_wap_wap pus

    3. **Java编程**:Java是实现CMPP和WAP Push服务的常用语言,具有跨平台的特性。这个压缩包中的代码可能涉及到Java的Socket编程,用于建立和维护与短信网关的连接,以及数据的序列化和反序列化。 4. **WAP Push消息...

    WapPush2.rar_PDUdecoding ja_WAP_Push_Java_push_wap push_wappush

    标题中的"WapPush2.rar_PDUdecoding ja_WAP_Push_Java_push_wap push_wappush"揭示了这个压缩包文件与WAP推送(WAP Push)技术有关,特别是涉及PDU解码(PDudecoding)以及Java编程语言的应用。WAP Push是一种在移动...

    WAP PUSH 发送源代码(网关发送)

    2. **源代码实现**:在代码中,会涉及到如何生成符合OTA SMS格式的PDU和SI,这通常需要对WAP Push协议有深入理解,包括编码规则和消息结构。这部分代码可能包含生成PDU的函数,以及构建SI信息的逻辑。 3. **发送...

Global site tag (gtag.js) - Google Analytics