android 模拟器短信乱码,彻底解决Android模拟器中文短信乱码问题

阅读: 评论:0

android 模拟器短信乱码,彻底解决Android模拟器中文短信乱码问题

android 模拟器短信乱码,彻底解决Android模拟器中文短信乱码问题

给模拟器发送短信的过程:

DDMS/Telnet->console->Kernel

发送短信导致乱码的地方在两个:

DDMS程序和console

短信乱码问题的原因:

中文短信是以ucs2编码,存储在pdu的usd区。

而传给系统的编码非ucs2。

第一步:

DDMS传给console的是GBK编码,console接收后前有底层统一转成UTF-8编码,至于为什么这里就不说了!

DDMS最后是用socket与console进行交互。UI操作以命令传给console;

默认发送时获取字节码的编码是ISO-8859-1。

所以我们做下修改:

console接收后由一个命令分发表转到sms_send

将字节码从utf-8流中解析出来

这里就出现了一个错误。汉字的UTF-8为三个字节。在做第二个和第三个自己读取前跳过了第二个。所以注释掉

顺便修改console发送时候的编码函数

方法同上

最后的步骤是用发送者号码和短信内容构建PDU短信;

smspdu_create_deliver_utf8-->smspdu_create_deliver-->gsm_rope_add_sms_deliver_pdu

我们主要关注gsm_rope_add_sms_deliver_pdu就行了

在这个函数中:主要涉及到PDU编码的知识,这个也不详细叙述,想了解的可以去百度;

根据代码分析,google在用户数据区前面多加了个长度信息。因为英文短信是从另外一个分支处理的,所以不受影响!

修改方法如图,注释掉那段代码!

OK,我们流程都打通了,现在就需要编译了。

编译我也说一句吧,需要编译模拟器emulator,sdk或者熟悉点的可以只编译ddms,然后拷贝到sdk。

好了,打完收工!你可以用telnet连接模拟器:telnet localhost 5554->sms send 10086 你好!

或者在DDMS那里发送,效果是一样的!

涉及文件:

externalqemutelephonysms.c

externalqemuandroidconsole.c

sdkddmslibsddmlibsrccomandroidddmlibEmulatorConsole.java

转载请说明出处!

本文发布于:2024-01-27 23:25:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063691013273.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模拟器   乱码   短信   中文   彻底解决
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23