android源代码在  彩信sms 表和彩信 pdu表,增加了一个触发器

CREATE TRIGGER delete_obsolete_threads_pdu AFTER
DELETE ON pdu BEGIN
DELETE FROM threads
WHERE     _id = old.thread_id     AND _id NOT IN    (SELECT thread_id FROM sms      UNION SELECT thread_id from pdu);END

仔细看下就明白,如果threads表没有sms和pdu外部引用的时候,这条thread就会被删除。

thread被删除后,你再插入一条短信或者彩信(当然是代码插入),这时候因为没有thread id,所以就会不显示。

有人可能想到对threads表一起进行维护不就行了吗?  很不幸 ,系统对这个表的providers并不完全开放,只能用于查找。

但我们这时候又需要thread_id,   我对源代码进行了一些修改,把thread类提取了出来,仅供大家参考

package com.sweetop.provider;import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.util.Patterns;public final class Threads implements ThreadsColumns {private static final String[] ID_PROJECTION = { BaseColumns._ID };private static final String STANDARD_ENCODING = "UTF-8";private static final Uri THREAD_ID_CONTENT_URI = Uri.parse("content://mms-sms/threadID");public static final Uri CONTENT_URI = Uri.withAppendedPath(Uri.parse("content://mms-sms/"), "conversations");public static final Uri OBSOLETE_THREADS_URI = Uri.withAppendedPath(CONTENT_URI, "obsolete");public static final Pattern NAME_ADDR_EMAIL_PATTERN = Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*");public static final int COMMON_THREAD = 0;public static final int BROADCAST_THREAD = 1;// No one should construct an instance of this class.private Threads() {}/*** This is a single-recipient version of getOrCreateThreadId. It's* convenient for use with SMS messages.*/public static long getOrCreateThreadId(Context context, String recipient) {Set<String> recipients = new HashSet<String>();recipients.add(recipient);return getOrCreateThreadId(context, recipients);}/*** Given the recipients list and subject of an unsaved message, return its* thread ID. If the message starts a new thread, allocate a new thread ID.* Otherwise, use the appropriate existing thread ID.* * Find the thread ID of the same set of recipients (in any order, without* any additions). If one is found, return it. Otherwise, return a unique* thread ID.*/public static long getOrCreateThreadId(Context context,Set<String> recipients) {Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();for (String recipient : recipients) {if (isEmailAddress(recipient)) {recipient = extractAddrSpec(recipient);}uriBuilder.appendQueryParameter("recipient", recipient);}Uri uri = uriBuilder.build();// if (DEBUG) Log.v(TAG, "getOrCreateThreadId uri: " + uri);Cursor cursor = context.getContentResolver().query(uri, ID_PROJECTION,null, null, null);if (true) {Log.v("Threads","getOrCreateThreadId cursor cnt: " + cursor.getCount());}if (cursor != null) {try {if (cursor.moveToFirst()) {return cursor.getLong(0);} else {Log.e("Threads", "getOrCreateThreadId returned no rows!");}} finally {cursor.close();}}Log.e("Threads","getOrCreateThreadId failed with uri " + uri.toString());throw new IllegalArgumentException("Unable to find or allocate a thread ID.");}public static String extractAddrSpec(String address) {Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address);if (match.matches()) {return match.group(2);}return address;}/*** Returns true if the address is an email address* * @param address*            the input address to be tested* @return true if address is an email address*/public static boolean isEmailAddress(String address) {if (TextUtils.isEmpty(address)) {return false;}String s = extractAddrSpec(address);Matcher match = Patterns.EMAIL_ADDRESS.matcher(s);return match.matches();}
}

当你需要获得一个thread id时,仅需调用

Threads.getOrCreateThreadId(this, address)

address是发送方的手机地址

如有问题,可以再评论中说明,我会一一回复。

另,转载注明出处

如果我的文章对您有帮助,请用支付宝打赏:

android短信和彩信探秘threads相关推荐

  1. Android短信开发 发送彩信 ‘ 高通源码 ‘ (彩信发送过程1)

    Android彩信发送有下面几个类: 一个一个类看  : 1 . ComposeMessageActivity.java   详情页面 2 . WoringMessage.java           ...

  2. android 读取短信 彩信,Android 短信转换成彩信的消息数量(实例代码)

    默认3条以上转为彩信 改为5条 路径vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/MmsConfig.java p ...

  3. Android短信数据库相关

    系统的短信库存在data/data/com.android.providers.telephony/databases/mmssms.db 打开mmssms.db 再打开sms表 因为所有短信数据都储 ...

  4. Android短信发送流程之多收件人发送(原)

    前面的< Android短信发送流程之长短信发送 >中介绍了长短信对于普通短信的区别,而对于多收件人的情况,在SmsMessageSender的queueMessage()方法中我们了解到 ...

  5. android 短信ril移植,将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现...

    摘要:本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统.为基于LINUX的通用平台实现一套成熟的RIL层代码,并开发出相 ...

  6. 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓短信功能全解:调用系统短信功能发送短信.彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信. 首先需要 ...

  7. Android短信数据库简析

    如果想跳过数据库介绍,直接看数据库操作代码的话,请点击这里: 读取Android短信 -------------– Android短信数据库: 读取Android系统所有短信 读取Android短信会 ...

  8. Android短信的发送和广播接收者实现短信的监听

    Android短信的发送和广播接收者实现短信的监听  要注意Android清单中权限的设置以及广播的注册监听实现 以下就是 Android清单的XML AndroidManifest.xml < ...

  9. android短信功能裁剪,Android短信发送功能实现技巧分享

    如现在启动一模拟器id 号为5554,运行cmd telnet localhost 5554 输入help 可以看到很多用于模拟器中的功能命令 gsm call 134343434   // 便是呼叫 ...

最新文章

  1. Resin3.19 连接池配置
  2. 【转】如何将域中的AD数据导入SharePoint
  3. rsync同步工具学习笔记
  4. strongswan 配置文件 /etc/ipsec.conf 速查手册1
  5. android——数据库版本升/降级问题
  6. android am start activity,adb shell am start -n package/.XXXactivity命令学习汇总
  7. 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路
  8. ADS中功放的PAE计算总结
  9. asdfasdfasdf
  10. NSIS “Win32 Error,Code:740 ,请求的操作需要提升”错误解决方法
  11. 微信支付v3——批量转账到零钱(提现)
  12. 好家园房产中介网后台管理项目
  13. SQL语句group by 的求和sum
  14. jacobi方法 matlab,Jacobi(雅可比)迭代原理与matlab代码
  15. 不使用前端的pdf.js,通过pdfbox转换pdf为图片,拼接成html实现pdf前端预览
  16. 机器视觉——VisionPro应用开发指南
  17. grant with admin option and grant with grant option
  18. Android中集成支付宝
  19. Google Glass: 未来不遥远
  20. turtle库描绘彩虹旋转图

热门文章

  1. 学习Python处理Excel 难度1级别 多表合并、数据透视表、拆分合并单元格并获得一维表
  2. ubuntu 12.04 下如何修改屏幕分辨率
  3. 聊一下Node.js中NAPI的napi_value
  4. 2021最新最全前端面试题(包含HTML、CSS、JavaScript、Vue、React、浏览器、算法与数据结构等)
  5. NDCG介绍、实现及在推荐系统中的应用实践
  6. sql注入bypass方法
  7. Orin 调试GMSL camera遇到问题之MIPI CSI2 报文解析
  8. 数据中心中出现极性问题怎么办?
  9. 光学分频器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. 虚拟机给openwrt添加硬盘并且配置smb