- 浏览: 435979 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
weiwu83:
为什么我在手机内访问127.0.0.1访问不了呀
NanoHttpd 构建android 手机端的HttpServer -
jiae:
为啥我的插入语句乱码? 但是可以插入数据库 然后复制你 ...
SQLite3 在应用启动时初始化数据 -
lichenxiao77:
...
android 连接远程数据库 -
林源滔:
为什么我make clobber之后第一次执行make 可以。 ...
No rule to make target `out/target/common/obj/JAVA_LIBRARIES/bouncycastle_in -
cn23snyga:
new String(str.getBytes("I ...
android 平台上SQLite3中文乱码 --我的小bug
[OTA]制作OTA短信来配置手机与服务器同步
编写者 |
日期 |
关键词 |
郑昀@ultrapower
|
2005-9-26 |
sms ota 同步 空中下载 手机 WDP WSP WBXML sync4j 同步设置 |
本文档讲解了OTA的概念,给出了如何发送“同步设置”的OTA短信的步骤,并附带Java编写的源代码(http://files.cnblogs.com/zhengyun_ustc/SyncSettingBuilder.rar)。
空中下载(OTA)的概念
OTA的基础概念可以参考我的《[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签》。下面简单介绍一下:
OTA,即Over The Air,国内翻译为空中下载。
OTA标准由爱立信和诺基亚共同制订。OTA涵盖了许多范围,比如Kjava中的应用程序下载也是通过OTA。我们这篇文章主要讲的是,通过短信方式空中下载同步配置信息,参考的文档是OTA_settings_general_7_0.pdf。
在
https://secure.forum.nokia.com/main/1,6566,1_47_50_10,00.html
你可以看到许多Nokia - Ericsson OTA Documents。
下载OTA Setting规范:
http://sw.nokia.com/id/3377eb33-cb1d-490e-a1cb-8735d785e1d3/OTA_settings_general_7_0.pdf
下载OTA Setting示范:
http://sw.nokia.com/id/bf5f034f-be06-4506-87b7-22788de5c316/OTA_service_settings_example_v11.pdf
规范中定义了三种Setting:
l 浏览器设置
l 浏览器的书签设置
l SyncML设置
也就是说,你通过发送短信可以帮助用户手机设置SyncSettings,从而可以让手机与服务器同步信息(如电话本、日程和记事本等)。
商业应用示范:无忧通讯录
手机无线同步服务--无忧通讯录,支持SyncML,最专业的手机号簿备份服务:
http://www.51txl.com:8080/51txl/
它提供的服务还是非常简单易用的:“无忧通讯录是一种方便使用的无线同步服务,它可以安全地将您手机上的电话簿备份到网络上。假如您的手机丢掉了、被偷或者损坏,这时您不用着急,无忧通讯录上保存有您的电话簿可立即被恢复,而且所有的操作都可方便地在无线状态下完成。”
注册它的时候,它给你的手机上发送一个短信“同步设置”,你用“存入设置”菜单命令保存这个短信到同步菜单里,这样你就可以利用这同步设置和她的服务器端做数据同步了。
我们下面具体讲解一下“同步设置”的OTA短信生成办法。
简单粗暴直奔主题
原则上,你只要看了OTA_settings_general_7_0.pdf,并参照OTA_service_settings_example_v11.pdf,就可以轻松地制作出符合规范的OTA短信。
但是,本文档的目的就是让你简单粗暴地直奔主题,运行本文档附带的源代码后,就可以制造出同步设置的短信的各个包了。
首先,你需要构造出这样的Sync Settings XML,如下所示:
Sync Settings XML |
<Version>1.0</Version> <HostAddr>http://10.18.168.183:8080/sync4j/sync</HostAddr> <Port>80</Port> <CTType>text/x-vcard</CTType> <CTVer>2.1</CTVer> <URI>./scard</URI> <Name>sync4j</Name> <AuthScheme>1</AuthScheme> <Username>guest</Username> <Cred />
</Auth> </RemoteDB> <Name>Sync4j</Name> <AuthLevel>2</AuthLevel> <AuthScheme>1</AuthScheme> <Username>guest</Username> <Cred />
</Auth> <ConType>1</ConType> <RefID>4jSvr</RefID> </ConRef> </SyncSettings>
|
其次,对这个XML文档,通过以下代码转译为WBXML:
OTAMessage的构造过程 |
File xmlDir = new File("C:\\opt\\xml\\sync4jsyncsettings.xml"); String xml = IOTools.readFileString(xmlDir);
SyncSettingWriter writer = new SyncSettingWriter(); vWriter.addElement(writer); XmlParser xmlp = new XmlParser(new StringReader(xml)); // 遍历XML解析 traverseXML(xmlp);
/* * 对于Vector中的每一个Writer都做关闭动作 */ int nIndex = 0; for(SyncSettingWriter writerSync : vWriter) { nIndex++; writerSync.close(vWriter.size(), nIndex); System.out.println(encodeHex(writerSync.getBytes())); } |
上面的代码最后来打印出了短信二进制内容,比如:
第一个短信包:
0b0504c34cc00200030402010106060502020b81ea01016a00555803312e30000150036
87474703a2f2f3231392e3233382e3136382e3138333a383038302f73796e63346a2f73796e6
30001520338300001544e03746578742f782d766361726400014f03322e31000156032e2f73636
172640001510373796e63346a000147490331000157037a68656e6779756e0001
其中的“0201”代表共有两个短信包,这是第一个包;
第二个短信包:
0b0504c34cc00200030402024d010101510353796e63346a000147480332000149033
1000157037a68656e6779756e00014d01014b4c033100015303346a53767200010101
其中的“0202”代表共有两个短信包,这是第二个包;
这样,手机收到这两个包之后,就知道按照顺序组合到一起,然后再解析了。
下面,我们来铺垫:
你要给目的手机发送一条短信,它必须是二进制格式的,这样手机才能够识别出来。
发送短信,可以通过
UltraBinarySMS |
UltraBinarySMS.SendSMS sendsms = new UltraBinarySMS.SendSMS(); string strResponse = sendsms.send(content, destmobile); |
发送短信,你就可以立即在手机上看到效果。
这几条短信内容差不多分为三块:
l WDP Layer的包头;
l WSP Layer的包头;
l WBXML。
同步SyncSettings XML的真正内容是用WBXML表述的。
WDP、WSP
什么是WDP和WSP呢?。
WDP即Wireless Datagram Protocol。WSP即Wireless Session Protocol。
更多信息可以参考http://www.protocols.com/pbook/wap.htm。
WAP Forum 在设计1.x版本的时候是经过深思熟虑的,但它和我们熟知和喜爱的3W协议(比如HTTP, SSL 和HTML)并不兼容。
WAP1.x堆栈被定义为五层,自底向上依次是:
u WDP (Wireless Datagram Protocol),
u WTLS (Wireless Transport Layer Security),
u WTP (Wireless Transaction Protocol),
u WSP (Wireless Session Protocol),
u WAE (Wireless Application Environment,包括 Wireless Markup Language 或 WML, 以及 WMLScript )。
每一层都和3W堆栈层面大致吻合:
n WDP->IP,
n WTP->TCP,
n WTLS->SSL/TLS,
n WSP->HTTP,
n WML->HTML。
这时你可以参考
http://www.protocols.com/pbook/images/wapstack.gif
,The OSI Model for Wireless Communication。
由于WSP相当于HTTP层,那么WSP层所肩负的职责是:
1).提供HTTP 1.1的功能和语义
2).能力协商
3).会话状态长期保存
4).会话挂起和恢复
5).可靠以及不可靠的Push的公共机制
等等。
在我们的OTA实现中,WSP Header其实就是声明两个内容:PDU type和MIME Type;至于WDP,就是声明一个端口号,并说明本数据包是整条短信的第几个包。
WBXML
WBXML,就是WAP Binary XML。
简单地说,它就是一个定义好的XML片断,可以表述出同步服务器地址、远程数据库名称、登录账号等等内容。
比如,这样一个实例:
Nokia给出的SyncSettings例子 |
<SyncSettings> <Version>1.0</Version> <HostAddr>http://www.syncserver.com/sync</HostAddr> <Port>8080</Port> <RemoteDB> <CTType>text/x-vcard</CTType> <CTVer>2.1</CTVer> <URI>./Contacts?CLASS=PRIVATE</URI> <Name>Private Contact DB</Name> <Auth> <AuthScheme>1</AuthScheme> <Username>james</Username> <Cred>cHdk</Cred> <!-- Base64 coded 'pwd' --> </Auth> </RemoteDB> <RemoteDB> <CTType>text/x-vcalendar</CTType> <CTVer>1.0</CTVer> <URI>./Calendar</URI> <Name>Calendar DB</Name> </RemoteDB> <Name>PIM Service</Name> <Auth> <AuthLevel>2</AuthLevel> <AuthScheme>1</AuthScheme> <Username>james</Username> <Cred>Ym9uZA==</Cred> <!-- Base64 coded 'bond' --> </Auth> <Auth> <AuthLevel>1</AuthLevel> <AuthScheme>1</AuthScheme> <Username>bond</Username> <Cred>Ym9uZA==</Cred> <!-- Base64 coded 'bond' --> </Auth> <ConRef> <ConType>1</ConType> <RefID>My AP</RefID> </ConRef> </SyncSettings> |
这样指明一个和服务器http://www.syncserver.com/sync进行数据同步。
很简单不是吗?
但是如何将这个XML转换为短信所需要的二进制呢?
转换过程:按图索骥
Nokia是这么定义转换规则的,很简单,就是尽可能简短地用一个字符表示某一个元素。
具体的转换规则,可以参考《OTA_settings_general_7_0.pdf》的8.2章节。
我们还提供了一个公开的Web Service:
http://219.238.168.183/SendBinarySMS/sendsms.asmx?wsdl
Web service介绍 |
提供免费的发送二进制短信的渠道。本服务仅供测试OTA自动配置和书签短信。中国移动有监控,请勿作其他用途。 支持下列操作。有关正式定义,请查看服务说明。 · send |
,供您测试发送OTA短信。只需要提供输入参数:短信内容和目标号码即可。
发表评论
-
ubuntu 下 node.js 的使用
2016-05-11 09:35 5801 添加node.js命令 从官网 https://no ... -
Android.mk文件解析
2016-01-27 14:01 937以 tools/tradefederation/Androi ... -
NanoHttpd 构建android 手机端的HttpServer
2015-10-20 16:24 2947NanoHttpd是Github上的一个开源项目, 通过下载 ... -
permission denial : android.permission.INTERACT_ACROSS_USERS_FULL
2015-08-05 16:50 5046在android5.0上运行 Runtime.getRun ... -
android getprop() 和 java System.getPropety()
2015-06-04 14:39 63581 System.getPropety()是java中的方 ... -
android cts测试相关
2015-05-27 17:38 0example: -
android uiautomator 相关
2015-05-15 16:53 16951 Runtime.getRuntime().exec 启 ... -
android UI test Espresso
2015-04-10 18:31 1202google android UI测试工具 espresso ... -
工作中遇到的java基础知识点
2015-02-03 10:41 6211& 例子:(flags & 1) != ... -
反射的使用
2015-01-09 17:26 703调用hidden方法 Method ... -
android 安全(转)
2014-12-26 12:37 721一 如何不被反编译解析1防止反编译工具的反编译 查看 ... -
nexus related
2014-12-17 15:29 7401 nexus drivers https://deve ... -
git related
2014-12-17 15:24 9661 see all detailed git info ... -
ubuntu android studio 配置和使用
2014-12-10 17:34 3627Ubuntu 64位,Android studio 的安装, ... -
eclipse+ADT+android配置相关
2014-12-05 16:40 14521 eclipse 过旧时,ant 运行不了,会报sdk. ... -
anroid 开发小知识点
2014-10-09 09:52 8231 1)代码 获取APK安装路径和包名 L ... -
java 常用查找算法
2013-09-24 11:37 26391 二分查找/折半查找 ... -
给自己看--软件设计师
2015-05-15 16:56 727国有很多小朋 ... -
androird 内存泄露 浅析
2013-06-19 17:52 1448主要是记录工作中出 ... -
java 代码中的一些优化点
2013-03-25 18:08 987仅为备忘只用: 1、别 ...
相关推荐
【杰理AC69N系列OTA库开发说明】主要涉及的是在Android平台上针对杰理AC69N系列芯片进行固件更新(OTA,Over-the-Air)的相关开发工作。这个库的开发遵循严格的知识产权规定,所有技术必须基于公知信息或者自主创新...
【杰理AC系列OTA库开发说明】\n\n杰理AC系列OTA(Over-the-Air)库是专为小程序设计的,用于实现设备的远程固件更新功能。这个库基于小程序的RCSP(Remote Control Service Protocol)库,因此包含了众多RCSP接口,...
这个压缩包“OTA服务 文档+代码 亲测可用.rar”显然包含了实现这一功能的相关文档和代码,特别针对全志(Allwinner)处理器的设备。全志是一家知名的芯片制造商,其产品广泛应用于各种Android设备,如平板电脑和智能...
总之,这份D1-H Tina Linux OTA开发指南1是一份全面的技术文档,涵盖了从理解OTA原理到实际操作的全过程,旨在帮助开发者顺利实现设备固件的远程更新。通过学习和应用指南中的内容,可以提高更新效率,减少因更新...
综上所述,"全志OTA服务器完整文档tomcat6+服务器端+客户端源代码"提供了一个全面的解决方案,包括服务器配置、客户端应用开发以及整个OTA更新流程的实施,对于理解Android设备的OTA更新机制及其在实际环境中的应用...
- **适用范围**:主要适用于全志H6平台,同时对其他平台的OTA开发具有借鉴意义。 - **相关人员**:主要是系统开发者、软件工程师和维护人员,他们需要理解并执行OTA升级过程。 - **专业术语**:包括OTA升级、...
首先,固件打包:在进行OTA升级之前,开发人员需要将新的固件代码编译成二进制文件,并且通常会添加校验码(如MD5或SHA-1)以确保文件的完整性和安全性。这个过程可能会使用像`TCP_IAP_http_v7.46_NB_Zigbee`这样的...
杰理OTA SDK_Android版本V1.6.0是一个针对珠海市杰理科技股份有限公司的AC69N系列芯片设计的软件开发工具包,主要用于实现设备的远程固件更新(Over-the-Air,简称OTA)。这个版本发布于2022年4月11日,包含了对现有...
在文档中提到的“高可靠OTA使用说明文档”中,阐述了针对Rockchip平台的高可靠OTA方案的应用与实施步骤。该方案的主要目的是通过增加备份分区来保证设备在升级过程中的稳定性,尤其是在升级遇到掉电或其他意外情况时...
使用说明部分则具体指导用户如何准备OTA升级,包括依赖软件包的下载与移植、定义配置参数、开发bootloader和APP、OTA固件打包以及升级流程等步骤。 API部分则详述了OTA升级过程中的各个功能接口,如初始化OTA、固件...
- **文档**:指导如何使用CMD进行编译和如何设置OTA环境的说明文档。 - **固件映像**:编译生成的待升级的DA14580固件文件。 - **工具**:如SmartSnippets库,用于设备端的固件更新和调试。 通过以上内容,开发者...
"Laravel开发-laravel-ota-distribution-ios"项目专注于在Laravel环境中实现iOS应用的Over-the-Air(OTA)分发功能。这允许用户通过网页直接下载并安装iOS应用,而无需通过App Store。 首先,我们要理解什么是OTA...
这对于技术支持人员和开发人员来说是非常宝贵的资源,可以帮助他们更高效地完成设备配置任务,并确保所有设备都能按照预期运行。 ### 安全性和合规性 在进行MOTO OTA Provisioning时,还需要考虑安全性和合规性...
描述中提到的“项目开发”暗示了这个压缩包包含了一整套的开发资源,可能包括源代码、编译工具、文档等。这通常涉及以下几个关键知识点: 1. **Android APP开发**:用于与单片机通信并执行OTA更新操作的手机应用...
通过这个流程,开发者可以轻松地更新ESP32设备上的程序,无需拆卸设备,大大提高了开发效率与设备的可维护性。需要注意的是,由于ESP32的OTA升级涉及到不同的分区,因此在执行升级前必须确保当前分区能够正确指向新...
使用场景及目标:适用于需要远程更新ESP32固件的场景,通过OTA更新技术提高开发效率和维护便利性。 阅读建议:建议读者按照步骤逐一操作,并结合ESP32官方文档进一步理解各个步骤的作用和细节。对于遇到的问题,可以...
在Android应用中集成RCSP协议的OTA流程封装库,可以帮助开发者简化更新流程,提高用户体验,同时减少开发过程中与硬件通信的复杂性。 快应用是介于传统应用程序和网页应用之间的一种新型应用形态,它无需下载安装,...
而"wap-235-pushota-20010425-a.pdf"文件很可能详述了WAP Push及OTA协议的细节。它可能讨论了如何构建Push消息,包括如何创建推送通知,如何定义推送服务ID(PSID),以及如何确保数据的安全性和可靠性。此外,文件...