Categories
Android CDMA

Hack c8812e

媳妇上周入手这款手机,主要研究Android 的UI,她们公司要做客户端。感觉很行,最不爽的,是一大堆定制软件,看着都烦,有些软件可以在软件管理卸载掉,有些需要root,/cust/chinatelecom/cn/app 目录下的OEM app,大都可以删掉。照着这个帖子 《华为C8812E刷机解锁ROOT教程(附带ROM下载地址)》,基本可以搞定。

很郁闷的是,

$ adb devices
List of devices attached 
????????????	device

有一串问号,以为是驱动连不上,试了 adb shell 居然可以进入,原来它就是这样!还有更变态的:

$ adb logcat
info: log device is empty!

关闭了log,解决方法:
http://stackoverflow.com/questions/6941710/unable-to-open-log-device-dev-log-main-no-such-file-or-directory

Dial this: *#*#2846579#*#*
Service menu will appear.
Go to “ProjectMenu” -> “Background Setting” -> “Log Setting”

Open “Log switch” and set it to ON.
Open “Log level setting” and set the log level you wish.

Reboot the phone.

有了root,那么限制你的,只有你的想象力了。删除的apk路径在:

/system/app
/system/delapp
/data/cust/app
/data/cust/delapp
/cust/chinatelecom/cn/app
/cust/chinatelecom/cn/delapp

上面的路径含有 delapp 的,是在管理软件里手动卸载后,在相应的 delapp 目录保存一份。删除之前,要清楚知道你在干什么,如果误删了,只得重新刷机。

想装上谷歌应用包 gapps,到 http://wiki.cyanogenmod.org/wiki/Latest_Version/Google_Apps 找最新的20121128 gapps 包,90多M,手机的 /system 分区没那么多空间,删掉没用的应用,还是不够,最后选用 gapps-ics-20120422-signed,50M.

$ adb remout
$ cd ~/Downloads/gapps-ics-20120422-signed
$ adb push system/ /system

上图:c8812e install google apps

如果误删了某个软件,怎么办?可以到华为官方下载ROM, 使用 split_updata.pl 打开 UPDATE.APP,提取 system.img。

$ perl split_updata.pl UPDATE.APP
Extracted output/file01.mbn
Extracted output/file02.mbn
Extracted output/boot_versions.txt
Extracted output/file04.mbn
Extracted output/file05.mbn
Extracted output/upgradable_versions.txt
Extracted output/file07.mbn
Extracted output/file08.mbn
Extracted output/file09.mbn
Extracted output/version.txt
Extracted output/file11.mbn
Extracted output/appsboothd.mbn
Extracted output/appsboot.mbn
Extracted output/file14.mbn
Extracted output/boot.img
Extracted output/file16.mbn
Extracted output/system.img
Extracted output/file18.mbn
Extracted output/userdata.img
Extracted output/file20.mbn
Extracted output/file21.mbn
Extracted output/recovery.img
Extracted output/file23.mbn
Extracted output/splash.raw565
Extracted output/file25.mbn

deli@deli-ThinkPad-T42:~/a/output$ du -sh *.img
382M boot.img
4.0K recovery.img
189M system.img
3.7M userdata.img

但发现 C8812的官方包解包后的boot.img实际上是system.img,system.img实际上是userdata.img,有点变态。boot.img 是 ext4格式,这个好办:

$ file boot.img
boot.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (needs journal recovery) (extents) (large files)
$ mkdir e
$ sudo mount -t ext4 -o loop boot.img e

$ cd e/
$ ls
app build.prop delapp fonts lib ts.conf usr wifi
bin cdrom etc framework media tts vendor xbin

取你所取。

Categories
Android CDMA

Android SMS 写入UIM卡

Smart Phone跟Featrue Phone不一样,短信不会放在ICC卡上,毕竟卡的存储空间是有限的。最近一网友很纠结,老在问我如何把短信写到UIM卡上?有没有办法写个通用的程序?这个主要决定于手机厂家没有实现相应的接口函数。

Android 提供把短信写入ICC卡的接口为:

frameworks/base/telephony/java/android/telephony/SmsManager.java copyMessageToIcc

如果是CDMA的话,调用过程如下:
frameworks/base/telephony/java/com/android/internal/telephony/cdma/RuimSmsInterfaceManager.java 里的函数 copyMessageToIccEf 调用

frameworks/base/telephony/java/com/android/internal/telephony/RIL.java 里的 writeSmsToRuim ,这个要发出

一个 RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM 请求号,RILD接收请求,传给 libril,再给 reference-ril,这样,只要在 reference-ril 里的
onRequest (int request, void *data, size_t datalen, RIL_Token t) 处理这个 RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM 请求号即可,根据不同的模组,填入相应的AT处理函数。

像XT800,i909双网手机,在长按单条短信时,都弹出复制SMS至UIM卡选项。通过反编译Mms.apk包,可以看出他们都自己实现自己的接口,而没有实现Android默认的Api。xt800提供了一个content://sms/icc provider,大致是这样实现的:

String sSc = null;
Uri uSim = null;
ContentValues values = new ContentValues();
values.put("type", Integer.valueOf(mBody.mBoxId));
values.put("address", mBody.mAddress);
values.put("body", mBody);
values.put("data", Long.valueOf(mBody.mDateTime));
values.put("service_center", sSc);

if (MessageUtils.getDefaultMode().equals("CDMA")) {
    Log.("ComposeMessageActivity", "start copy msg to UIM");
    sSc = mContentResolver.insert(Uri.parse("content://sms/icc", values));
} else if (MessageUtils.getSecondaryMode().equals("CDMA")) {
    sSc = mContentResolver.insert(Uri.parse("content://sms/icc2", values));
}

Log.("ComposeMessageActivity", "finish copy msg to UIM");

i909的,自己实现
private void copyMessageToUIM(MessageItem msgItem), 调用SmsManager.MakeSubmitPDU, 也是自己的实现的。

Categories
Android CDMA

Android CDMA 手机开发要点

Android从1.6版本开始支持CDMA,cdma-import分支由Teleca CDMA团队开发,最后合并到主干。浏览 http://android.git.kernel.org, 在heads可以查看cdma-import的代码变化,从ril层到上层的应用程序。

RIL

多了下面的请求号:

RIL_REQUEST_CDMA_SET_SUBSCRIPTION
RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE
RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE
RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE
RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE
RIL_REQUEST_CDMA_FLASH
RIL_REQUEST_CDMA_BURST_DTMF
RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY
RIL_REQUEST_CDMA_SEND_SMS
RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE
RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG
RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG
RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION
RIL_REQUEST_CDMA_SUBSCRIPTION
RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM
RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM

自动上报:

RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL
RIL_UNSOL_CDMA_CALL_WAITING
RIL_UNSOL_CDMA_OTA_PROVISION_STATUS
RIL_UNSOL_CDMA_INFO_REC
RIL_UNSOL_RESPONSE_CDMA_NEW_SMS

主要工作在 hardware/ril/reference-cdma-sms 实现cdma 短信的编解码,模组特殊AT处理。

Telephony Framework

在 telephony framework层,该启动 CDMAPhone 还是 GSMPhone ?

frameworks/base/telephony/java/com/android/internal/telephony/PhoneFactory.java 里的makeDefaultPhone函数:

//Get preferredNetworkMode from Settings.System
int networkMode = Settings.Secure.getInt(context.getContentResolver(),
        Settings.Secure.PREFERRED_NETWORK_MODE, preferredNetworkMode);

如果要设置成EvDo网络,则需要在init.rc配置文件里添加:
setprop ro.telephony.default_network 6
RILConstants.java有对应的值。

如果设置错了,怎么办?在类PhoneProxy中处理消息 EVENT_RADIO_TECHNOLOGY_CHANGE,进行纠正,选择是使用GSM还是CDMA,给PhoneApp发送一个Intent通知radio technology变化。

APP
应用不需要做太大的修改,其中设置应用添加与中国电信CDMA特性相关的,比如接入点名称:
中国电信互联星空设置 ctwap
中国电信互联网设置 ctnet

这些在国外手机是不需要分什么wap、net的,但中国电信CDMA的天翼视讯、天翼阅读仅支持ctwap接入。

Categories
CDMA

CDMA MMS PUSH 彩信通知

这里用的模组是 via威盛的cdma。首先,设置短信通知格式:
AT+CNMI=2,1

用一cdma手机给模组发一条彩信,由于URL 链接较长,网络可能会连续发送多条(常见是 2 条)Wap Push 短信,应根据长短信标准拼接后再做进一步处理。

+CMT:”RAM”,4,186,”000002fdea020602069966084006010008a8000310f130018e0460001880
35000c2820c0008008fc02e11a4189185c1c1b1a58d85d1a5bdb8bdd9b990b9dd85c0b9b5b5ccb
5b595cdcd859d9402d21ebe12320a61113daddde108ccd5b19149040236420da1d1d1c0e8bcbcc4
c0b8c8ccd0b8c4ccdcb8c4c4e8e0c0e0c0bddd85ccbd113daddde108ccd5b1914904022016040c0a8
c02243600c4cccce4c8e0dcc4c8d0d40228003060907031436470a01400e06040d32cc1080″

+CMT:”RAM”,5,63,”000002fdea020602069966084006014c082d000310eb9001130088001880
35000850020000806023808a3dc003060907031436470a01400e06040d32cc1080″

分析一下第一条:

teleserviceId为65002,就可以判断这时一条彩信通知,GSM的是通过分析端口号来做判断。进一步分析,提取到 TP_UD为:

00 03 10 06 A0 01 85 04 18 00 10 01 1F 80 5C 23 48 31 23 0B 83 83 63 4B 1B 0B A34B 7B 71 7B B373 21 73 BB 0B 81 73 6B 6B 99 6B 6B 2B 9B 9B 0B 3B 28 05 A4 3D 7C 24 64 14 C2 227B 5B BB C2 1199 AB 63 22 92 08 04 6C 84 1B 43 A3 A3 81 D1 79 79 89 81 71 91 99 A1 71 89 99 B971 89 89 D1 C181 C1 81 7B BB 0B 99 7A 22 7B 5B BB C2 11 99 AB 63 22 92 08 04 40 2C 08 18 15 18 04 48 6C 01 8999 99 C9 91 C1 B9 89 91 A1 A8 04 50

Wap push短信 PDU 中的 User data,按照短信标准解析,前面部分是 Header信息,如 Msgid、Num_field 等,后面部分是 Chari 内容。Chari 内容需要再进一步解析,中国电信的 Wap Push 短信PDU 中的 User data 里的 Chari 也分为两部分,前半部分是 Header 信息,类似于 User data的 Header 信息,后面部分数据才是 WDP 数据,需要按照 WDP 协议(Wireless Datagram Protocol)进行解析。

WDP

Msg Indetifier:
SUBPARAMETER_ID        8       0000000
SUBPARAM_LEN     8       00000011
MESSAGE_TYPE     4       0001 (Deliver) /0010 (Submit)
MESSAGE_ID  16     -Generated –
HEADER_IND  1       0
RESERVED      3       000

User Data
SUBPARAMETER_ID        8       00000001
SUBPARAM_LEN     8       Number of Octets in this Sub Parameter, not including SUBPARAMETER_ID and SUBPARAM_LEN
MESSAGE_ENCODING   5       00000
MESSAGE_TYPE     0       Ignored
NUM_FIELDS  8       This field shall be set to the number of characters included in this subparameter.

CHARi      Variable   Characters. This shall include NUM_FIELDS occurrences of this field
RESERVED      0-7   All zeroes used for padding.

(This field shall contain the number of bits required to make the entire subparameter an integer number of octets in length.

CHARi
MSG_TYPE       8       00000000
TOTAL_SEGMENTS         8       Total  number of segments
SEGMENT_NUMBER       8       The Segment Number
DATAGRAM      (NUM_FIELDS – 3)*8         Segmented WDP Datagram

WDP Datagram Segment
SOURCE_PORT       16     Source Port
DESTINATION_PORT       16     Destination Port(2948)
DATA        N*8  N bytes of Data from the Layer above WDP

按照上面的格式,解析CHARI就是

00 02 00 23 F0 0B 84 69 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 6E 64 2E 77 61 70 2E 6D 6D73 2D 6D 65 73 73 61 67 65 00 B4 87 AF 84 8C 82 98 44 4F 6B 77 78 42 33 35 6C 6452 41 00 8D 9083 68 74 74 70 3A 2F 2F 31 30 2E 32 33 34 2E 31 33 37 2E 31 31 3A 38 30 38 30 2F77 61 73 2F 444F 6B 77 78 42 33 35 6C 64 52 41 00 88 05 81 03 02 A3 00 89 0D 80 31 33 33 39 3238 37 31 32 3435 00 8A

00 MSG_TYPE
02 TOTAL_SEGMENTS
00 SEGMENT_NUMBER
23 F0 SOURCE_PORT
0B 84 DESTINATION_PORT
69 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 6E 64 2E 77 61 70 2E 6D 6D73 2D 6D 65 73 73 61 67 65 00 B4 87 AF 84 8C 82 98 44 4F 6B 77 78 42 33 35 6C 6452 41 00 8D 9083 68 74 74 70 3A 2F 2F 31 30 2E 32 33 34 2E 31 33 37 2E 31 31 3A 38 30 38 30 2F77 61 73 2F 444F 6B 77 78 42 33 35 6C 64 52 41 00 88 05 81 03 02 A3 00 89 0D 80 31 33 33 39 3238 37 31 32 3435 00 8A DATA

这是第一条的 DATA,同样分析第二条的 TP_UD为:

00 03 10 06 A0 01 0A 00 40 00 10 0C 04 70 11 47 B8

CHARI为

00 02 01 80 8E 02 28 F7

DATA为80 8E 02 28 F7

和第一条合并起来,那么DATA就是

69 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 6E 64 2E 77
61 70 2E 6D 6D73 2D 6D 65 73 73 61 67 65 00 B4 87 AF 84 8C 82 98 44 4F 6B 77 78 42 33 35 6C 6452 41 00 8D 9083 68 74 74 70 3A 2F 2F 31 30 2E 32 33 34 2E 31 33 37 2E 31 31 3A 38 30 38 30 2F77 61 73 2F 444F 6B 77 78 42 33 35 6C 64 52 41 00 88 05 81 03 02 A3 00 89 0D 80 31 33 33 39 3238 37 31 32 3435 00 8A80 8E 02 28 F7

61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 6E 64 2E 7761 70 2E 6D 6D73 2D 6D 65 73 73 61 67 65 00 == application/vnd.wap.mms-message

B4 87: Push Flags: 87
AF 84: X-Wap-Application: 04
8C 82: X-Mms-Message-Type: m-notification-ind
98 44 4F 6B 77 78 42 33 35 6C 6452 41 00   Transaction-ID: DOkwxB35ldRA
8D 90 : X-Mms-mms-version : 1.0
83 68 74 74 70 3A 2F 2F 31 30 2E 32 33 34 2E 31 33 37 2E 31 31 3A 38 30 38 30 2F77 61 73 2F 444F 6B 77 78 42 33 35 6C 64 52 41 00  Content-location:http://10.234.137.11:8080/DOkwxB35ldRA

88 05 81 03 02 A3 00 expirty:
89 0D 80 31 33 33 39 3238 37 31 32 3435  From: 1339287124
8A80  message-class:”personal”
8E 02 28 F7  message-size:

注: B4,AF,8C,98 等,是高位加1(0x80)之后的content type.

Categories
CDMA

CDMA SMS pdu解码

去年玩过via cdma模组,刚开始对cdma sms pdu真是一脸茫然,意识到我也可能不会长时间做这个,网上这类帖子少之又少,体会初学者的辛苦,重新翻尸体,记录下来。

收到两条短信,现在用AT把它们读取出来。

at+cmgr=5
+CMGR:5,”REC UNREAD”,”15338896020″,”UNKNOWN NUMBER”,”N/A”,176

“0000021002020702c54ce225a8a80601c0089d00031001e801
8e2230018801780193108b09fb087b317b012b6a080162e38c8e6
3b422e07b65980162b942e872e4b3b4246f7a70500162e54bbf9a7
053f67c7e3801729f544c0b108bb423918a75d00163317a70033b0
ae07ce3e00162b943108bb4236b54158a71680162ff5a7283b423
71c33b2b71c29dd80173108b09fb087b317c1a933cb80162b943659
b6a0bb4227122e5c00306081229192611″

at+cmgr=21
+CMGR:21,”REC UNREAD”,”15338896020″,”UNKNOWN NUMBER”,”N/A”,96

“0000021002020702c54ce225a8a806014c084d00031001f8013
e20f00190017801900162dfca7004b1acb1abb4239614c67001629
63b2b12b9827ae310c001729f544c0b108bb423918a75d00163317
a70029f52e07cf0f80306081229192616”

[deli@deli example]$ ./test_pdu_decode
0000021002020702c54ce225a8a80601c0089d00031001e8018e22
30018801780193108b09fb087b317b012b6a080162e38c8e63b422
e07b65980162b942e872e4b3b4246f7a70500162e54bbf9a7053f67
c7e3801729f544c0b108bb423918a75d00163317a70033b0ae07ce3
e00162b943108bb4236b54158a71680162ff5a7283b42371c33b2b7
1c29dd80173108b09fb087b317c1a933cb80162b943659b6a0bb422
7122e5c00306081229192611
sms context == 1/2我愿意是急流,山里的小河,在崎岖的路上,岩石上经过.只要我的爱人,是一条小鱼,在我的浪花中,快乐的游来游去.我愿意是荒林,在河流的两岸
SM_ENCODING == 4
TPA == 15338896020
SCTS == 19:26:11 12/29/08

[deli@deli example]$ ./test_pdu_decode
0000021002020702c54ce225a8a806014c084d00031001f8013e20f
00190017801900162dfca7004b1acb1abb4239614c6700162963b2
b12b9827ae310c001729f544c0b108bb423918a75d00163317a700
29f52e07cf0f80306081229192616
sms context == 2/2,对一阵阵的狂风,勇敢地作战.只要我的爱人,是一只小鸟
SM_ENCODING == 4
TPA == 15338896020
SCTS == 19:26:16 12/29/08

PDU串解析

CDMA的pdu格式与GSM的相差很多,不能直接用肉眼看出来。第一条内容比较长,就拿第二条pdu串来分析吧。
1.首先将PDU串打成PDU包
将PDU串相邻的两个ascii字符拼凑成一个8bit数据

如下:
00 00 02 10 02 02 07 02 c5 4c e2 25 a8 a8 06 01 4c 08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

消息传送类型: 0x00 point to point message(表示点对点消息)

下面的内容为短消息的各个字段 每个字段分为三个部分: 字段类型(ID)(8bit)、字段长度(Length)(8bit)和字段内容.

第一个字段: 00 02 10 02
0x00, 表示uTeleserviceID字段
0x02, 字段长度,该长度必须为2,否则为错误的pdu信息

字段内容为:0x1002,十进制是4098,

第二个字段: 02 07 02 c5 4c e2 25 a8 a8
0x02, SMS_TL_ORIG_ADDR 表示 (短信发送地址)
0x07, 字段长度为7
字段内容: 02 c5 4c e2 25 a8 a8
只看前面几个 02 c5 4c e2的:
0000 0010 1100 0101 0100 1100 1110 0010 0010
取第一个bit 0 表示 RIL_CDMA_SMS_DIGIT_MODE_4_BIT 是4bit压缩
第二个bit 0 表示 RIL_CDMA_SMS_NUMBER_MODE_NOT_DATA_NETWORK
下来8个bit 是 00 0010 11 = 11,表示号码长度 为11
由于是4bit压缩 ,后面44个bit(4*11)表示号码,解析出来是
15338896020

第三个字段: 06 01 4c
表示SMS_TL_BEARER_RPLY_OPT

第四个字段:08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

0x08, 表示SMS_TL_BEARER_DATA字段(短信内容)
0x4d,字段长度为77

这个字段也分成各个子字段:

第一子字段: 00 03 10 01 f8
0x00
Mesage Id
0x03 内容长度
10 01 f8  === 0001 0000 0000 0001 1111 1000
0001 表示 DELIVER 短信
0000 0000 0001 1111表示 message id.
紧接后面的 1, 表示HEADER_IND

第二个子字段:01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8
0x01, 字段类型
0x3e(62),字段长度
20 f0 01 === 0010 0000 1111 0000 0000 0001
0x20 的前5个bit为00100, 为0x04, 表示短信编码方式为RIL_CDMA_SMS_ENCODING_UNICODE (UNICODE)
0x20 的后3个bit, 0xf0的前5个bit,为 000 1111 0, 即0x1e (30),表示有30个UNICODE 字符。0xf0的后3个bit,0x01的8个bit,再加上0x90的前5个bit,

0000 0000 0011 0010 拼成一个16位数是 0x0032 表示字符 :2,在vim下了解一个字符的16进制码很简单,光标在该字符,按ga,底端显示结果如下:

<2>  50,  Hex 32,  Octal 062                                  2,1           All

依次下去,内容就是上面运行./test_pdu_decode 的结果: 2/2,对一阵阵的狂风,勇敢地作战.只要我的爱人,是一只小鸟

第三个子字段: 03 06 08 12 29 19 26 16

这是一个时间戳字段: 08年12月29号19时26分16秒(短消息发送时间)

字符串分析结束。当然,还有很多可选项在这条短信没有加上,更完整的SMS格式,请参考CDMA SMS standard on 3GPP2 website.

实际编码时,一个while循环遍历,再加上switch简单的状态机即可。

长短信何在?

用的这个模组,不支持长短信,厂家回答“作了预处理,把User Data Header去掉了,因为客户一般不愿意自行处理这个User Data Header,他们只要内容、号码等其它信息。所以,模块送出的PDU中不含有User Data Header。”

为实现长短信的拆分和组合功能,终端应支持 IS637C 协议中关于长短消息处理的参数 HEADER_IND,以及在短消息数据中增加对 User Data Subparameter 参数增加用户数据消息头(User Data Header)和短信拆分、组合的处理。HEADER_IND 为消息头标识位,用于指示 User Data Header 是否包含消息头, 若包含消息头则 HEADER_IND 设置为’1’,否则设置为’0’。具体的拆分与组合,请参考IS637C,或 《中国电信CDMA终端需求规范-SMS分册-V1.0》。需要说明的是,对长短信的处理,有的CDMA模组厂家为了让用户省事,帮你处理了用户数据头,正如前面所看到的,自动加上(1/2), (2/2)等,若想自己手动解析,务必跟模组厂家沟通确认好。

Pages: 1 2 Next