android – 如何在“content: smsdraft”中插入草稿后更新sms线程

android – 如何在“content: smsdraft”中插入草稿后更新sms线程,第1张

概述我使用以下代码将草稿插入内容:// sms / draft ContentValues values = new ContentValues(); values.put("address", receiver2); values.put("body", body2); values.put("date", String.valueOf(System. 我使用以下代码将草稿插入内容:// 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",3);        values.put("thread_ID",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);        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
如您所见,在我通过上面的代码制作的草稿旁边没有“草稿”标签.

解决方法 我提出这个问题已经有一段时间了,但是答案是这样的:

首先,如前所述,“草稿”提示未出现在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);    }

注意:草稿邮件可能包含也可能不包含邮件收件人的地址.草稿保存在线程上(一个线程可以包含许多收件人)

虽然根本没有记录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

总结

以上是内存溢出为你收集整理的android – 如何在“content:// sms / draft”中插入草稿后更新sms线程全部内容,希望文章能够帮你解决android – 如何在“content:// sms / draft”中插入草稿后更新sms线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1122919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存