恢复备份的消息,会话时间不正确

时间:2016-12-23 17:24:31

标签: android

我正在开发一个Android应用程序,它备份并恢复设备的消息/对话。它备份消息,以xml的形式导出文件,然后再恢复它。我面临的唯一问题是谈话的日期/时间。它在恢复时被更改为当前时间,但是当我打开任何对话时,时间是正确的。看看照片。

备份前:

备份后:

我用于备份的代码:

Uri uri = Uri.parse("content://sms/inbox");
        //Uri uri = Uri.parse("content://mms-sms/conversations/");
        ContentResolver contentResolver = getContentResolver();

        final String[] projection = new String[]{"*"};

        Cursor SMSL = contentResolver.query(Telephony.Sms.Inbox.CONTENT_URI, projection, null, null, null);
        int msgscount = SMSL.getCount();
        if (msgscount>0) {
            msgs = new String[SMSL.getCount()][5];
            int i = 0;
            while (SMSL.moveToNext()) {
                address = SMSL.getString(SMSL.getColumnIndex("address"));
                body = SMSL.getString(SMSL.getColumnIndex("body"));
                read = SMSL.getString(SMSL.getColumnIndex("read"));
                date = SMSL.getString(SMSL.getColumnIndex("date"));
                type = SMSL.getString(SMSL.getColumnIndex("type"));

                msgs[i][0] = address;
                msgs[i][1] = body;
                msgs[i][2] = date;
                msgs[i][3] = read;
                msgs[i][4] = type;

                Log.i("Date: ", String.valueOf(SMSL.getLong(SMSL.getColumnIndex("date"))));

                i++;
            }
            SMSL.close();
        }else{
            msgs = new String[0][0];
            Toast.makeText(getApplicationContext(),"No messages found!",Toast.LENGTH_LONG).show();
        }

恢复代码:

                    ContentResolver contentResolver = getContentResolver();
                    Uri uri = Uri.parse("content://sms/inbox");
                    //Uri uri = Uri.parse("content://mms-sms/conversations/");

                    ContentValues values = new ContentValues();
                    for (int i = 0; i < readMsgsFromFile.length; i++) {
                        values.put("address",readMsgsFromFile[i][0]);
                        values.put("body",readMsgsFromFile[i][1]);
                        values.put("date",readMsgsFromFile[i][2]);
                        values.put("read",readMsgsFromFile[i][3]);
                        values.put("type",readMsgsFromFile[i][4]);

                        contentResolver.insert(Telephony.Sms.Inbox.CONTENT_URI, values);
                        Log.i("Restoring: ",readMsgsFromFile[i][2]);
                    }

1 个答案:

答案 0 :(得分:1)

感谢Mike M.我确实找到了解决方案而你是对的,每当用户收到或发送新消息时,会话表就会更新,并且会话时间与该消息的时间相同(无论是接收还是发送)时间。但是在通过true查询编写消息的情况下,它不起作用,并且会话时间是写入时的当前时间。所以我做的是在消息恢复后立即在所有对话中添加临时消息。之后删除所有临时消息,这会将会话时间更新为上次消息时间。

contentresolver

这个词'temp'可以而且应该更独特,以免与实际信息混合。