我使用下面的代碼插入到草案內容://短信/草案如何插入草案後更新短信線程「的內容://短信/草案」
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如果沒有與上述地址進行任何對話,則它是該線程的標識。
當我運行這段代碼時,草稿確實被保存了,但是本地sms客戶端(股票android 4.0.3)中的線程沒有更新爲「draft」[我可以看到草稿消息體,但是有沒有「草稿」標籤。我必須打開關閉線程,以便標記爲標記]。我已經在某處看到線程沒有正確更新的問題。我如何強制更新線程以便在所有客戶端中都顯示正常?
編輯:
看了您的回答,我已經更新了我的代碼了一下,但問題仍然存在。我在下面添加了一個屏幕截圖,因爲當我寫下我的問題時,我很匆忙,無法清楚地寫下來。
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;
}
a busy cat http://oi46.tinypic.com/2mnkoqq.jpg 正如你所看到的,有沒有「草稿」的標籤,旁邊是我通過代碼作出上述草案。
在消息應用程序中,打開草稿並再次關閉它。看草稿標籤是否出現。這是因爲某些SQLite觸發器需要運行才能自動完成您沒有提供的值。 –
正如我在我的問題中寫的,草稿標籤* does *在我打開關閉線程後出現。有什麼辦法通過我的應用程序觸發該觸發器? –
如果你殺死消息應用程序並重新啓動它,它會正確顯示每一件事情。這將是一個消息應用程序的問題。所以,我不確定可以做些什麼。 –