【发布时间】:2019-08-26 18:38:36
【问题描述】:
我正在使用以下代码将草稿插入到 content://sms/draft
ContentValues values = new ContentValues();
values.put("address", receiver2);
values.put("body", body2);
values.put("date", String.valueOf(System.currentTimeMillis()));
values.put("type", "3");
values.put("thread_id", thread_id);
getContentResolver().insert(Uri.parse("content://sms/draft"), values);
如果与上述地址没有任何对话,则thread_id为0,否则为该线程的id。
当我运行这段代码时,草稿确实被保存了,但是本机短信客户端(股票 android 4.0.3)中的线程没有更新为“草稿”[我可以看到草稿消息正文,但没有“草稿”标签就可以了。我必须打开-关闭线程,才能被标记为标记]。我在某处读到线程没有正确更新的问题。如何强制更新线程以便在所有客户端中显示正常?
编辑:
阅读了您的答案后,我对代码进行了一些更新,但问题仍然存在。我在下面添加了一个截图,因为当我写我的问题时,我很着急,写得不够清楚。
protected void save_draft(String[] recipients, String body) {
Uri threadIdUri = Uri.parse("content://mms-sms/threadID");
Uri.Builder builder = threadIdUri.buildUpon();
for (String recipient : recipients) {
builder.appendQueryParameter("recipient", recipient);
}
Uri uri = builder.build();
Long thread_id = get_thread_id(uri);
Log.d("thread_id", thread_id + " ");
ContentValues values = new ContentValues();
values.put("body", body);
values.put("date", String.valueOf(System.currentTimeMillis()));
values.put("type", 3);
values.put("thread_id", thread_id);
getContentResolver().insert(Uri.parse("content://sms/draft"), values);
//^tried "content://sms/" as well, but got the same result
}
private Long get_thread_id(Uri uri) {
long threadId = 0;
Cursor cursor = getContentResolver().query(uri, new String[] { "_id" },
null, null, null);
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
threadId = cursor.getLong(0);
}
} finally {
cursor.close();
}
}
return threadId;
}
如您所见,在我通过上面代码制作的草稿旁边没有“草稿”标签。
【问题讨论】:
-
在消息应用中,打开草稿并再次关闭。查看草稿标签是否出现。这是因为需要运行某些 SQLite 触发器才能自动完成您未提供的值。
-
正如我在问题中所写,草稿标签 确实 在我打开关闭线程后出现。有什么方法可以通过我的应用触发该触发器?
-
如果您杀死消息应用程序并重新启动它,它会正确显示所有内容。这是消息传递应用程序的问题。所以,我不确定对此能做些什么。
标签: android sms android-contentresolver