2012-06-25 3 views
2

CDMA 3GPP2 지점 간 SMS 메시지를 디코딩하는 프로그램을 작성했습니다. 필자는 인터넷에서 발견 된 몇 개의 CDMA PDU 16 진 문자열을 테스트했으며 완벽하게 작동합니다. 그러나 안드로이드 플랫폼에 들어오는 모든 문자 메시지에 그것을 구현하려고하면 항상 실패합니다.Android에서 CDMA PDU 구문 분석

나는 들어오는 PDU를 살펴 봤는데, 나는보기에 익숙했던 동일한 패턴을 따르지 않는 것 같습니다. 누구든지이 PDU가 어떤 형식인지 또는이 PDU를 올바르게 디코딩하기 위해 누락 된 것이 무엇인지 설명 할 수 있습니까? 추가 헤더 나 필드가 고려되지 않았습니까?

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 

내가 찾은 등과 같은 모습에 내 파서을 시험 CDMA의 모든 PDU :

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847 

캐리어 : Verizon

예 PDU 내 휴대 전화에 들어오는 텍스트 메시지에서 가져온 전화 번호 : Samsung Galaxy S Fascinate running Android 2.3.3

답변

2

$ SDK/sources/android-16/com /에서 javadoc을 참조하십시오. 외부/내부/전화 통신/cdma/SmsMessage :

/** 
* Creates byte array (pseudo pdu) from SMS object. 
* Note: Do not call this method more than once per object! 
*/ 

... 특정 CDMA 표준을 따르지 않습니다. 그러나 디코딩 할 수 있습니다. 그래서 잘 ASCII 아트에서 -

나는 당신이 당신의 메시지에 잘라 내기/붙여 넣기 오류했다고 생각
000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 
--------messageType  --digitMode     --------bearerReply ------------------------------------------------------bearer data 
     --------teleService --ton --------------------src  --replySeqNo --messageID --msts   --userdata 
       --------serviceCategory       --errorClass --len --XX--len   --len 
          --numberMode       --causeCode ------  ------------2012/06/24 20:56:11 
           --npi         --------bearerDataLength    ----------------------userdata 
           --len           

주 - 00 바이트로 표시 '를 XX'나는 없을해야한다고 생각 - 운이 좋게가 자리 쉽다 날짜와 거꾸로 작동합니다. 따라서 이것은 사용자 데이터가있는 6789101674의 메시지입니다 :

104C2CF9F3F5EBD73E7000 (처음 5 비트는 7 비트로 인코딩 됨 (0x02)). "Bggguuugg은"

09859f3e7ebd7ae7ce00 
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body 
    ----------------7bit-body 

그래서 당신의 7 비트 바디 디코딩입니다 : 왼쪽에있는 유저 데이터 5 비트의 나머지 시프트 데, 우리는 남아 있습니다.

관련 문제