2014-04-30 95 views
1

看來,如果有一些較大的文本短信來了,這是削減某種原因使不整的短信進來,這裏是我的代碼:安卓短信廣播接收機沒有得到全文較大短信

public class SmsReceiver extends BroadcastReceiver { 
    // vars here 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     // Get SMS map from Intent 
     Bundle extras = intent.getExtras(); 

     if (extras != null) { 
      // Get received SMS array 
      Object[] smsExtra = (Object[]) extras.get(SMS_EXTRA_NAME); 

      String address = ""; 
      String body = ""; 

      for (int i = 0; i < smsExtra.length; ++i) { 
       SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]); 
       body = sms.getMessageBody().toString(); 
       address = sms.getOriginatingAddress(); 
      } 

     // show the popup 
     Intent intnt = new Intent(context, ShowNotification.class); 
     intnt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intnt.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     intnt.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     intnt.putExtra("address", address); 
     intnt.putExtra("body", body); 
     context.startActivity(intnt); 

     } 
    } 
} 

現在讓我們假設短信是:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.

而且我看到前面的烤麪包廣播接收機接收短信從,被顯示在祝酒只有最後幾個字或者即使我這條短信的身體傳遞給另一個彈出意圖,只有儘可能多的文字被傳遞過來hown在祝酒:

int duration = Toast.LENGTH_LONG; 
Toast toast = Toast.makeText(context, body, duration); 
toast.show(); 

所以出於某種原因而不是整個短信是:(

未來誰能告訴如何處理呢?正如我看到其他短信應用程序,如短信彈出或Go SMS Pro,他們得到完整的短信文本,並顯示在彈出或對話。

感謝您的幫助

+0

首先,我敢肯定你已經檢查了這一點,但確實'sms.getMessageBody()的toString()'換貨政。完整的短信身體?如果是這樣,問題可能是Toast無法顯示大量文本。不過,我還沒有找到它的實際限制。 – Smokez

+0

@Smokez:謝謝你的提示,那就是問題:) – Dev01

回答

5

好了,所以我想通了,我用的是隻獲得了最後一個短信代碼,只需將所有短信:

此:

body = sms.getMessageBody().toString(); 

應該是:

body += sms.getMessageBody().toString();