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;
}

你读取一次收件箱,确实只有一条短信。
你可以打印出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刷新的问题