2011-09-19 60 views
4

我需要将sms存储到sqlite数据库,当我收到一个。在这一刻,它可以正常工作(短信160个字符),但是如果我收到多部分短信,它会截断短信约155个字符。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

谢谢! :)问题是,我只存储'消息[0]'! – supergiox

0

当考虑到多部分SMS的用户数据标题时,155个字符听起来像用户数据的长度。换句话说,这听起来不像这里有问题 - PDU正在正确存储。您将需要收集SMS的其他PDU以显示/存储完整的内容。