2014-04-30 65 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();