Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在“content:// sms / draft”中插入草稿后更新sms线程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用以下代码将草稿插入内容:// 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线程所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。