2011-09-19 6 views
4

私はそれを受け取ったときにsqliteデータベースにSMSを保存する必要があります。現時点ではsms(160文字)で正常に動作しますが、マルチパートsmsを受け取った場合、smsは約155文字で切り捨てられます。マルチパート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を集める必要があります。

関連する問題