最近在做Android 里面的短信(SMS)导入/导出的功能,就是导出到XML里面,再恢复回去。不过在导入的时候,明明已经插入进SQLite数据库了,可是在短信列表里面死活就是不显示出来~在不指定id的情况下,如果我用手机收到一条短信的话(该短信id为1),其他刚才导入的短信也都显示出来了,真是奇怪~难道是我导入短信的时候有什么标识、字段没有插完整?求解。下面是我导入的代码(部分):    private void restoreMessage() {
        ContentResolver cr = getContentResolver();
        for (int i : result) {
            Message message = list.get(i);
            try {
                // 主题
                if (message.getId() == message.getThread_id()) {
                    Uri threadUri = Sms.addMessageToUri(cr, Sms.CONTENT_URI, message.getAddress(),
                            message.getBody(), message.getSubject(),
                            Long.valueOf(message.getDate()), true, true);
                    for (int j = 0; j < result.size(); j++) {
                        Message tmp = list.get(j);
                        // 跳过当前
                        if (tmp.getId() == message.getId()) {
                            continue;
                        }
                        if (tmp.getThread_id() == message.getId()) {
                            Sms.addMessageToUri(cr, threadUri, tmp.getAddress(), tmp.getBody(),
                                    null, Long.valueOf(tmp.getDate()), true, false,0);
                        }
                    }
                }            } catch (Exception e) {
                Log(e.getStackTrace());
            }
        }
        Toast.makeText(getApplicationContext(), result.size() + " imported.", Toast.LENGTH_SHORT)
                .show();
    }

解决方案 »

  1.   

    我察,csdn 的人都到哪里去了???好在这个问题我自己已经解决了,是content URI 地址错误导致的。看了下位于telephony 下 Sms 源码得到的答案,使用Sms.Inbox.addMessage() 方法导入即可。代码如下:371 +                if (message.getType() == Sms.MESSAGE_TYPE_INBOX) {
    372 +                    Sms.Inbox.addMessage(cr, message.getAddress(), message.getBody(), null,
    373 +                            Long.valueOf(message.getDate()), true);
    374 +                } else {
    375 +                    Sms.Outbox.addMessage(cr, message.getAddress(), message.getBody(), null,
    376 +                            Long.valueOf(message.getDate()), true, -1L);
    377 +                }
      

  2.   

    我也在做这个,之前用数据库操作,结果不能insert到threads里面去,急死了谢谢楼主分享这个方法,顺带求分,thanks
      

  3.   

    a.好在这个问题我自己已经解决了,是content URI 地址错误导致的。b.在不指定id的情况下,如果我用手机收到一条短信的话(该短信id为1),其他刚才导入的短信也都显示出来了,真是奇怪~不是说地址错了么,为什么现象b还会插入?
      

  4.   


    去看看MMS 是怎么呈现短信列表的源码就知道了~