我正在开发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中得到一个数据,那么我从yyyy获得第一个短信.c.getcount()的print语句返回一个。这意味着只有xxxx信息。
如果我从yyyy获得第二个短信。那么它工作正常。我会得到xxxx和yyyy的对话详情
答案 0 :(得分:0)
当您调用getConversation()方法时,可能不会将消息写入db。 content:// mms-sms /不是官方API,其行为可能很奇怪。尝试在其他地方调用getConversation