2011-09-19 12 views
4

Мне нужно сохранить sms в sqlite db, когда я его получу. В настоящий момент он отлично работает с sms (160 символов), но если я получаю многостраничный sms, он обрезает sms примерно на 155 символов.BroadcastReceiver для multipart SMS

Это мой код:

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 был принят во внимание. Другими словами, это не похоже на то, что здесь есть проблема - PDU хранится правильно. Вам нужно будет собрать другие PDU для SMS, чтобы отображать/хранить всю вещь.

Смежные вопросы