android短信和彩信探秘threads


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是发送方的手机地址


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


另,转载注明出处


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



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32446.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国最容易和最难被GPT所代替的TOP25职业!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://tmqcjr.com 每天给大家更新可用的国内可用chatGPT资源 OpenAI 研究人员曾发文称「约 80% 美国人的工作将被 AI 影响」。 文章的结论是&#xff0c;至少80%的美国劳动力会受到影响&#xf…

AI帮我搞科研-网站汇总

检索相关论文&#xff1a;https://www.connectedpapers.com/ 说明&#xff1a;Connected Papers 不是引文树。为了创建每个图表&#xff0c;网站分析了大约 50,000 篇论文&#xff0c;并选择了几十篇与原始论文有最强联系的论文。在图中&#xff0c;论文根据它们的相似性进行…

android6 wifi耗电,耗电太快?快来看不一样的安卓手机省电攻略

前阵子在官方授权店把我的iPhone电池换了个新的&#xff0c;感觉自己的手机又活过来了!那么问题来了&#xff0c;咱们的安卓手机该怎么省电呐~ 所以我发现其实最简单粗暴的方法就是 换电池&#xff01;别打我…我就是皮一下… 下面就是知识点了&#xff0c;快点操作起来吧~ 首先…

股票价格趋势预测与量化投资案例可视化演示系统(附代码)

摘要 随着全球经济与股市的快速发展&#xff0c;股票投资成为了民众们常用的理财方式之一。近年来&#xff0c;量化投资凭借其优良的纪律性、准确性、时效性和系统性等优势受到越来越多的关注。与西方成熟市场相比&#xff0c;我国量化投资还处于起步阶段&#xff0c;存在一些…

基于大数据的股票数据可视化分析与预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 股票市场行情分析与预测是数据分析领域里面的重头戏&#xff0c;其符合大数据的四大特征&#xff1a;交易量大、频率高、数据种类多、价值高。 本项目基于 Python 利用网络爬虫技术从某财…

TensorFlow神经网络实现股票预测

目录 1、数据来源 2、数据可视化 3、神经网络设计 神经网络&#xff08;NeuralNetworks&#xff09;是一种用训练数据拟合目标函数的黑箱模型&#xff0c;只要数据量足够大&#xff0c;它可以拟合出输入到输出之间的任意函数关系。 本篇博文将使用TensorFlow神经网络进行股…

火狐插件FoxyProxy的使用方法

以前自己挖漏洞使用火狐burp抓包测试&#xff0c;但是每次浏览器开代理老麻烦了 今天同事无意间给我提了这个插件FoxyProxy 很实用&#xff0c;下面是使用教程&#xff0c;很直白很详细 首先安装火狐插件FoxyProxy 然后选择Options开始配置 . 然后重启浏览器 选中Burpsuite …

如何解决:FIREFOX的副本已经打开。一次只能打开一份FIREFOX

1.问题 由于电脑卡机使Firefox自动退出之后&#xff0c;重新点击Firefox图标无法打开程序在mac版Firefox中打开时提示&#xff1a;“Firefox的副本已经打开。一次只能打开一份Firefox” 2.解决 重启没解决使用终端中断程序也无法解决活动监视器中中断程序解决 3.方法 1.其他…

Firefox浏览器多账号登陆方法

1、需要安装插件Multifox&#xff0c;由于此插件已经从firefox官网&#xff08;插件&#xff09;上下架&#xff0c;因此需要从Multifox的github上直接下载 2、下载地址&#xff1a;https://github.com/hultmann/multifox/releases/tag/3.2.3 3、直接选则“ multifox-3.2.3-fx.…

Firefox个性化教程

Firefox是跨平台兼容的浏览器软件 注意&#xff0c;是浏览器软件而不是搜索引擎 可能有人不明白&#xff0c;那我简单讲解。 常见的浏览器软件有edge&#xff0c;Firefox&#xff0c;chrome之类的 常见的搜索引擎有Google&#xff0c;bing&#xff0c;duck duck go&#xff0c;…

火狐安全软件Huohong

你还在为垃圾软件&#xff0c;恶意弹窗&#xff0c;病毒骚扰等而烦扰吗&#xff1f; 让简约高效的火狐安全软件来帮助你吧&#xff01; 火绒互联网安全软件 — 轻巧、高效、超强防御的安全防护软件。功能强悍&#xff0c;体量轻巧&#xff0c;既干净又安静。它能全面防御病毒、…

音视频技术开发周刊 | 298

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 AI艺术在北京798&#xff0c;展望人工智能与环境的未来 本文很有意思的提出了个假设&#xff0c;通过人工智能和艺术家协作与实践产生环绕地球的叙事&#xff0c;去开启置…

chatgpt赋能python:用Python模拟串口:学习串口通信的好方法

用Python模拟串口&#xff1a;学习串口通信的好方法 计算机与外部设备之间的通信经常需要串口。串口通信是指通过串行通信协议在计算机与外部设备之间进行数据传输。在实验室工作中&#xff0c;在传感器网络和控制系统中我们经常使用串口进行通信。为了调试这些系统&#xff0…

绿联nas骚操作,没事帮你压测下网络

如果遇到路由器频繁掉网&#xff0c;且家里有个绿联nas&#xff0c;那么大概率是nas的锅&#xff0c; 没啥值钱东西&#xff0c;希望不要掏空我的资料~ 继扫盘之后的又一骚操作 发现自从更新最新版本后&#xff0c;家里频繁出现断网。因为路由器为与nas通过单口1000兆&#xff…

History of Object Recognition (物体识别)

在github上看到一副总结的非常好的图&#xff08;原图地址&#xff09;先码住 &#x1f600;&#x1f600;&#x1f600; 物体识别的综述 &#x1f340;发展历史&#xff1a; &#x1f331;图像分类&#xff08;Image Classification&#xff09; 任务&#xff1a;根据图像中…

谷歌 TensorFlow 物理检测 API,目前最好的物体识别方案?

原文&#xff1a;Is Google Tensorflow Object Detection API the easiest way to implement image recognition? 作者&#xff1a;Priya Dwivedi 译者&#xff1a;聂震坤 审校&#xff1a;屠敏 用大数据干大事&#xff01; 目前有很多种图像识别的方案&#xff0c;而 Goog…

姿态识别、手势识别(附代码)

姿态识别技术是一种基于计算机视觉的人体姿态分析方法,可以通过分析人体的姿态,提取出人体的关键点和骨架信息,并对人体的姿态进行建模和识别。随着深度学习技术的发展,近年来姿态识别技术得到了广泛的应用和研究,其中Pose是一种基于深度学习的姿态识别工具包。本篇博客将…

用户手势检测-GestureDetector使用详解

前言&#xff1a;今天终于可以正常上班了&#xff0c;阿里的百技真的真的太累了&#xff0c;作为队长&#xff0c;不仅要考虑到每一个人的感受&#xff0c;而且要最大程度地使大家团结起来&#xff0c;共同完成一个任务&#xff0c;四天的时间&#xff0c;14个人的小组完成一个…

如何使用OpenCV对物体进行搜索检测与识别

在本教程中&#xff0c;我们将了解对象检测中称为“选择性搜索”的重要概念。我们还将用C 和Python共享OpenCV代码。 物体检测与物体识别 对象识别算法识别图像中存在哪些对象。它将整个图像作为输入&#xff0c;并输出该图像中存在的对象的类标签和类概率。例如&#xff0c;类…

通用物体识别使用攻略

作者&#xff1a;让天涯 一、需求描述 大家在出去旅游的时候&#xff0c;往往会对景点里的特色事物感兴趣&#xff0c;而一般情况下&#xff0c;如果没有导游的介绍&#xff0c;我们不太清楚这个景区里的特色景点是什么&#xff0c;有时候即使看到了一个事物&#xff0c;都不…