2011-09-19 4 views
4

SMS 수신시 SMS를 sqlite db에 저장해야합니다. 이 순간에 그것은 sms (160 문자)와 잘 작동하지만, 만약 내가 multipart sms를 받으면 약 155 자로 sms를 잘라 버린다.멀티 파트 SMS 용 BroadcastReceiver

SmsBR.java

public class SmsBR extends BroadcastReceiver { 
    private DBManager dbm; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
        Bundle bundle = intent.getExtras(); 
        if (bundle != null) { 
         Object[] pdus = (Object[])bundle.get("pdus"); 
         final SmsMessage[] messages = new SmsMessage[pdus.length]; 
         for (int i = 0; i < pdus.length; i++) { 
          messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         } 
         if (messages.length > 0) { 
          dbm=DBManager.getDBM(null); 
          dbm.insertSMS(messages[0]); 
                }}}} 

DBManager 내가 읽기/쓰기 작업을 단순화하기 위해 쓴 싱글 톤 클래스이며, 나는 그것이 아무 문제가 없다고 확신 :

내 코드입니다 긴 텍스트!

답변

7

여러 응용 프로그램에 따르면 멀티 파트 SMS가 동일한 의도로 수신되고 메시지 배열로 표시되는 것처럼 보입니다.

StringBuffer content = new StringBuffer(); 
for (Message sms : messages) { 
    content.append(sms.getDisplayMessageBody()); 
} 
String mySmsText = content.toString(); 

는 지금까지 내가 아는 한,이 메시지가 올바른 순서 것 같다 :

그래서 기본적으로, 당신은 전체 메시지를 검색 할 수 있습니다. 어쨌든, 나는 pdu를 파싱하는 것을 제외하고는 메시지 헤더를 가져올 방법을 모른다.

+0

고맙습니다! :) 문제는 단지'messages [0]'만 저장한다는 것이 었습니다! – supergiox

0

155 멀티 파트 SMS의 사용자 데이터 헤더를 고려할 때 chars는 사용자 데이터의 길이와 같게 들립니다. 즉, 여기서 문제가있는 것처럼 들리지는 않습니다 - PDU가 올바르게 저장되고 있습니다. 전체 내용을 표시/저장하려면 SMS 용 다른 PDU를 수집해야합니다.