Я использую следующий код, чтобы вставить черновик в 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, если не было никакого разговора с указанным выше адресом, иначе это идентификатор этого потока.
Когда я запускаю этот код, черновик действительно сохраняется, но поток в собственном клиенте sms (стандартный 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;
}
Как видите, рядом с черновиком, который я сделал с помощью приведенного выше кода, нет ярлыка «Черновик».