Ale*_*tyl 3 sms android android-contentresolver
我使用以下代码将草稿插入内容:// 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);
Run Code Online (Sandbox Code Playgroud)
如果没有与上面地址的任何对话,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;
}
Run Code Online (Sandbox Code Playgroud)
一只忙碌的猫http://oi46.tinypic.com/2mnkoqq.jpg 正如你所看到的,在我通过上面的代码制作的草稿旁边没有"草稿"标签.
我提出这个问题已经有一段时间了,但是答案是这样的:
首先,如前所述,"草稿"提示未出现在Native SMS应用程序中的事实不应该困扰任何人.没有什么可以做的,它只是Native SMS应用程序的工作方式.特别是在应用程序启动时初始化缓存,保存包含草稿的线程的线程ID.草稿缓存仅从应用程序本身更新,而不是从sms表中的实际更改更新
对于保存草案部分,这里是正确保存草稿的代码段:
public static final Uri CONTENT_URI =
Uri.parse("content://sms/draft");
public static Uri addDraft(ContentResolver resolver,
String address, String body, String subject,
Long date, long threadId) {
ContentValues values = new ContentValues(6);
values.put(ADDRESS, address);
if (date != null) {
values.put(DATE, date);
}
values.put(READ, Integer.valueOf(1));
values.put(SUBJECT, subject);
values.put(BODY, body);
if (threadId != -1L) {
values.put(THREAD_ID, threadId);
}
return resolver.insert(CONTENT_URI , values);
}
Run Code Online (Sandbox Code Playgroud)
注意:草稿邮件可能包含也可能不包含邮件收件人的地址.草稿保存在线程上(一个线程可以包含许多收件人)
虽然根本没有记录sms数据库,但您可以从AOSP获取Telephony类,并查看如何添加/删除消息以及处理有关sms和mms的各种任务. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/provider/Telephony.java
| 归档时间: |
|
| 查看次数: |
4524 次 |
| 最近记录: |