查询系统源码看短信的显示如何写:
在providers.telephony:SmsProvider:
1.确定怎么查数据库中的表:
Uri = content://sms/conversations
2.确定查询语句: select 映射条目 from 表 where 查询条件
表:
sms, (SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups
查询条件:
sms.thread_id = groups.group_thread_id AND sms.date = groups.group_date
映射条目:
sms.body AS snippet
sms.thread_id AS thread_id
groups.msg_count AS msg_count
所以查询语句:
select
sms.body AS snippet,sms.thread_id AS thread_id,groups.msg_count AS msg_count
from
sms, (SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups
where
sms.thread_id = groups.group_thread_id AND sms.date = groups.group_date
查询结果:
还需要号码,日期/时间
但看系统源码的映射列都已经写死,用户若添加自己需要的列会将系统的列覆盖:
看系统如何解决:找query:
这里的query是用户来调用的,所以projectionIn是用户传进来的,
继续找:同一个方法内,看query怎么处理projictionIn的,
点击查看如何处理用户传进来的projectionIn的,
再次点击发现进不去,为本类的方法:查找:
第一个在判断里面,略去不看,看第二个:将projection等各种参数建立成为一个sql语句,点击,发现进不去,,buildQuery为一个本类方法:查找其实现:
点击发现是一个本类方法,查找其实现:
分析源码:
将需要添加的列写好,测试正确性:
select sms.body AS snippet,sms.thread_id AS thread_id,groups.msg_count AS msg_count,sms.address as address,sms.date as date
from sms, (SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups
where sms.thread_id = groups.group_thread_id AND sms.date = groups.group_date
详细代码:
1.
- package com.itcode.SMSManager.utils;
- import android.net.Uri;
- public class SmsUtils {
- public static final Uri SMSURL = Uri.parse("content://sms/conversations");
- }
2.
- package com.itcode.SMSManager;
- import android.app.Activity;
- import android.content.AsyncQueryHandler;
- import android.content.ContentResolver;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.util.Log;
- import com.itcode.SMSManager.utils.SmsUtils;
- public class ConversationActivity extends Activity {
- private ConversationAsyncQueryHandler asyncQuery;
- private static final String[] CONVERSATIONSMSPROJECTION = {
- "sms.body AS snippet", "sms.thread_id AS thread_id",
- "groups.msg_count AS msg_count", "sms.address as address",
- "sms.date as date" };
- public static final String TAG = "ConversationActivity";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_conversion);
- asyncQuery = new ConversationAsyncQueryHandler(getContentResolver());
- asyncQuery.startQuery(0, null, SmsUtils.SMSURL,
- CONVERSATIONSMSPROJECTION, null, null, "date DESC");
- }
- private class ConversationAsyncQueryHandler extends AsyncQueryHandler {
- private String value;
- private String columnName;
- public ConversationAsyncQueryHandler(ContentResolver cr) {
- super(cr);
- // TODO Auto-generated constructor stub
- }
- /**
- * 当异步查询结束后调用的方法
- * Called when an asynchronous query is completed.
- * token the token to identify the query, passed in from startQuery.
- * cookie 添加额外的数据的 the cookie object passed in from startQuery.
- * cursor 查询出来的结果集The cursor holding the results from the query.
- */
- @Override
- protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
- // TODO Auto-generated method stub
- super.onQueryComplete(token, cookie, cursor);
- if(cursor != null && cursor.getCount()>0){
- int columnCount = cursor.getColumnCount();
- while(cursor.moveToNext()){
- for(int i=0;i<columnCount;i++){
- columnName = cursor.getColumnName(i);
- value = cursor.getString(i);
- Log.i(TAG,"当前是第"+cursor.getPosition() + "行:" + columnName + ":" + value);
- }
- }
- }
- }
- }
- }
运行结果:
相关推荐
Android SMS 短信内容显示在一个 泡泡 形状的窗口中.zip Android 打包签名 从生成keystore到完成签名.zip Android-QuickSearchBox程序源码.zip android常用图片特效处理.zip android超炫的图片浏览器.zip Android...
Android系统源码获取及编译.zip android项目实例 商业项目源代码.rar Gmail备份手机短信【源码】.zip http 演示Demo.zip OA精灵2011_Android版.rar PopWindow.rar Preference_Demo.rar TestListView02.rar WIFI 扫描...
360新版特性界面源代码.rar aidl跨进程调用.rar andbatdog电池监控.rar andbatdog监视电池.rar andricoFacebook客户端.rar Android 实现自动接听...Android系统源码获取及编译.zip android项目实例 商业项目源代码.rar
本例子是一个短信拦截防火墙的例子源码,可以拦截指定号码的短信,让短信不显示。这个例子不像前面发的那两个可以启动后直接在后台运行,需要手动指定拦截号码,不知道前两个源码的朋友可以在本站搜一下短信拦截就...
10.4 短信管理器(SmsManager) 400 10.5 音频管理器 (AudioManager) 404 10.5.1 AudioManager简介 404 10.6 振动器(Vibrator) 407 10.6.1 Vibrator简介 407 10.6.2 使用Vibrator控制手机振动 407...
传智播客 Android 视频教程 课程源码 课程安排 第一天 1>搭建Android开发环境 2> 创建与启动手机模拟器 3> 学习使用ANDROID操作系统 4> 开发与运行(卸载)第一个ANDROID应用 5> 项目的目录结构 6> 项目清单文件...
TP新版抢单系统,招财宝自由宝 HZ区块系统源码带门票支付与激活码功能源代码全开源无加密[Thinkphp 内核] 源码为原始版本 完整版本 为框架源码 如完善细节功能运营请自行修改二开 提示:程序为手机端访问 电脑端登录...
大学生创业项目_垃圾短信过滤APP电信诈骗识别拦截系统源码+项目说明.zip 【项目语言】 web页面:html、css、JavaScript、JQuery、Bootstrap等 安卓前端开发:java 后端服务器:python(flask框架) 【技术要点】 ...
利用广播进行过滤短信,可以将你需要加密的短信显示到这个app上,而不会在显示到系统自带的短信中
显示当前系统运行的进程信息 显示系统内存信息, 可以杀死某个进程,批量杀死进程,通过桌面widget 实时展现用户当前的手机内存状态。 上网管理: 显示出每个程序wifi和3g/2g 访问的上传和下载的流量,帮助用户了解程序...
本项目是一套功能强大的手机助手...实现了手机应用软件的管理、SD文件管理、安卓手机短信的备份与还原、电池状态监控显示、程序锁、流量统计和查询、手电筒等七大主要功能,本站之前也介绍过一个免费的手机助手项目源码
9.4 Android系统内置Intent 199 本章小结 201 第10章 数据存储 203 10.1 健康助手案例 203 10.2 Android数据存储概述 205 10.3 本地文件 205 10.3.1 访问SD卡 207 10.3.2 访问应用文件目录 212 10.4 SQLite...
本代码合集包括10个源代码:(1)call_listener利用广播接收器监听来电、去电,...(4)send_sms_activity通过系统程序发送短信 (5)send_sms通过SmsManager类直接发送短信 (6)save_send_sms保存短信发送记录。短信
修复 下订单短信通知无法发送问题(阿里大于) 修复 后台选择原始链接后,部分页面显示伪静态问题 修复 部分数据库版本下,后台职位列表页SQL报错 新增 企业营业执照审核结果微信模板消息通知 优化 企业职位列表添加...
|--android root下禁用组件 |--android 判断网络状态 |--android 对话框样式 |--android 开机启动 |--android 挪动dialog的位置 |--android 控制对话框位置 |--android 根据uri获取路径 |--android 模拟器错误 |--...
包含部分书中源码 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
用户的个人主页显示自己关注的帖子信息,查询自己发布的帖子提问信息,查询自己的回答评论信息,还可以编辑个人资料,上次自己的头像,用户还可以给你邮箱发验证码绑定邮箱,给手机发短信码绑定手机,功能多多!...
安卓是一种广泛使用的移动操作系统,具有开放性和灵活性,因此我们选择开发安卓项目源码,以满足开发人员的需求。 首先,我们的安卓项目源码提供了丰富的功能和模块,可以满足各种类型的安卓应用需求。无论是社交、...