1

我正在开发一个 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 的对话详细信息

4

1 回答 1

0

当您调用 getConversation() 方法时,消息可能不会写入 db。content://mms-sms/ 不是官方 API,它的行为可能很奇怪。尝试在其他地方调用 getConversation

于 2012-08-21T10:11:43.260 回答