我正在开发一个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]);
}
答案 0 :(得分:1)
感谢Mike M.我确实找到了解决方案而你是对的,每当用户收到或发送新消息时,会话表就会更新,并且会话时间与该消息的时间相同(无论是接收还是发送)时间。但是在通过true
查询编写消息的情况下,它不起作用,并且会话时间是写入时的当前时间。所以我做的是在消息恢复后立即在所有对话中添加临时消息。之后删除所有临时消息,这会将会话时间更新为上次消息时间。
contentresolver
这个词'temp'可以而且应该更独特,以免与实际信息混合。