我正在开发一个 Android 应用程序。在我的应用程序中,我必须收听短信并显示对话。所以我使用以下代码。
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sender = msgs[i].getOriginatingAddress();
message = msgs[i].getMessageBody().toString();
smsSummary.append(getContactDisplayNameByNumber(sender, context));
smsSummary.append(": ").append(message).append("\n");
}
上面的代码工作正常,我正在获取短信详细信息和内容。所以我必须检查短信内容提供商的对话。我使用了以下代码。
getConversation(sender,context);
public void getConversation(Context context){
Uri uri = Uri.parse("content://mms-sms/conversations/");
Cursor c= context.getContentResolver().query(uri, null, null ,null,"DATE desc");
// startManagingCursor(c);
System.out.println("c.getCount()===="+c.getCount());
if(c.moveToFirst()){
for(int i=0;i<c.getCount();i++){
if(sender.equals(c.getString(c.getColumnIndexOrThrow("address")).toString())) {
body_new=c.getString(c.getColumnIndexOrThrow("body")).toString();
date_new=convertToDate(c.getString(c.getColumnIndexOrThrow("date")));
num_new=c.getString(c.getColumnIndexOrThrow("address")).toString();
tid=c.getInt(c.getColumnIndex("thread_id"));
}
c.moveToNext();
}
}
c.close();
}
当我从一个号码收到第一条短信时。getConversation() 方法没有列出该号码。例如。如果我没有任何对话,我从 yyyy 收到第一条短信。打印语句。
System.out.println(c.getCount());
将返回零。
就像如果我从数字 xxxx 得到一个 convarsation,那么我会从 yyyy 收到第一条短信。c.getcount() 的打印语句返回一个。这意味着仅 xxxx 信息。
如果我从 yyyy 收到第二条短信。那么它工作正常。我将获得 xxxx 和 yyyy 的对话详细信息