android获取短信内容时,总是收到两次短信内容

public String getSmsAndSendBack()

{

    String[] projection = new String[] { "address", "person", "body" };
    StringBuilder str = new StringBuilder();
    try {
        ContentResolver cr = getContentResolver();
        Cursor myCursor = cr.query(Uri.parse("content://sms/inbox"),
                projection,

                "address = ?", new String[] { "+86"+number},
                "date desc");

        str.append(processResults(myCursor, true));
    } catch (SQLiteException ex) {

        // Log.d(LOG_TAG, ex.getMessage());
    }

    return str.toString();

}

/**
 * 
 * 处理短信结果
 * 
 * @param cur
 * 
 * @param all
 *            用来判断是读一条还是全部读。后来没有用all,可以无视
 */

private StringBuilder processResults(Cursor cur, boolean all) {

    StringBuilder str = new StringBuilder();

    if (cur.moveToFirst()) {

        String name;
        String phoneNumber;
        String sms = null;
        int nameColumn = cur.getColumnIndex("person");
        int phoneColumn = cur.getColumnIndex("address");
        int smsColumn = cur.getColumnIndex("body");
        // do {
        name = cur.getString(nameColumn);
        phoneNumber = cur.getString(phoneColumn);
        if (phoneNumber.equals("+86"+number)) {
            sms = cur.getString(smsColumn);
            str.append(sms);
        }

        if (null == sms)

            sms = "";
        // } while (cur.moveToNext());
    } else {

        str.append("no result!");
    }
    return str;
}

![图片说明](https://img-ask.csdn.net/upload/201505/24/1432472589_284704.png)

你读取一次收件箱,确实只有一条短信。
你可以打印出cursor的长度。 cursor.getCount();
如果重复发送信息,就会收到多条短信。

图片说明

给你一段代码参考一下吧:

 @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
            Object[] pdus = (Object[]) intent.getExtras().get("pdus");
            for (Object pdu : pdus) {
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
                //String sender = smsMessage.getDisplayOriginatingAddress();
                String content = smsMessage.getDisplayMessageBody();
                //long date = smsMessage.getTimestampMillis();
                //Date timeDate = new Date(date);
                //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //String time = simpleDateFormat.format(timeDate);
                messageListener.onReceived(content);
            }
        }
    }
 smsBroadcastReceiver = new SMSBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter(SMS_RECEIVED_ACTION);
        intentFilter.setPriority(Integer.MAX_VALUE);
        // 注册广播
        this.registerReceiver(smsBroadcastReceiver, intentFilter);
        smsBroadcastReceiver
                .setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
                    @Override
                    public void onReceived(String message) {
                        Pattern pattern = Pattern.compile("^.*([0-9]{4}).*$");
                        Matcher matcher = pattern.matcher(message);
                        if (matcher.find()) {
                            inputCodeEt.setText(matcher.group(1));
                        }
                    }
                });

1.检查myCursor数据
2.检查你是listview,是不是因为UI刷新的问题