android sms内容提供商第一次没有给出价值

时间:2012-08-21 07:20:03

标签: android android-contentprovider

我正在开发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的对话详情

1 个答案:

答案 0 :(得分:0)

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