Android SMS Read

AndroidManifest.xml 权限

记得在AndroidManifest.xml中加入android.permission.READ_SMS这个permission

<uses-permissionandroid:name="android.permission.READ_SMS"/>


运行结果:


代码示例



URI主要有:

content://sms/ 所有短信
content://sms/inbox 收件箱
content://sms/sent 已发送
content://sms/draft 草稿
content://sms/outbox 发件箱
content://sms/failed 发送失败
content://sms/queued 待发送列表


sms主要结构:
  1. _id => 短消息序号 如100
  2. thread_id => 对话的序号 如100
  3. address => 发件人地址,手机号.如+8613811810000
  4. person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null
  5. date => 日期long型。如1256539465022
  6. protocol => 协议0SMS_RPOTO,1MMS_PROTO
  7. read => 是否阅读0未读,1已读
  8. status => 状态 -1接收,0complete,64pending,128failed
  9. type => 类型1是接收到的,2是已发出
  10. body => 短消息内容
  11. service_center => 短信服务中心号码编号。如+8613800755500
String[] projection = new String[]{"address", "body"};
Cursor cursor = getContentResolver().query(uri, projection, "where .." new String[]{"", ""}, "order by ..")


Android短信存储数据库

偶然发现了Android源码中的一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中。

公开的SDK中没有这个类,不能直接使用。于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常。看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份。

MmsSmsDatabaseHelper.java在Android源码中的路径:

packages/providers/TelephonyProvider/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java


sms数据库中的字段如下:

_id 一个自增字段,从1开始
thread_id 序号,同一发信人的id相同
address 发件人手机号码
person 联系人列表里的序号,陌生人为null
date 发件日期
protocol 协议,分为:0SMS_RPOTO,1MMS_PROTO
read 是否阅读0未读,1已读
status 状态-1接收,0complete,64pending,128failed
type
ALL = 0;
INBOX = 1;
SENT = 2;
DRAFT = 3;
OUTBOX = 4;
FAILED = 5;
QUEUED = 6;

body 短信内容
service_center 短信服务中心号码编号
subject 短信的主题
reply_path_present TP-Reply-Path
locked


sms数据库表字段类型的源码:

packages/providers/TelephonyProvider/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java


联系人为空

短信数据库里面如果你是先受到陌生短信之后再把陌生人添加到联系人列表的话,短信数据库里面的person字段就为null,如果你是先添加联系人再发短信的话,短信数据库里面的person字段就不为空了,所以你要是想通过短信数据库里的字段取得联系人的其他信息的话,只能通过地址来取。



参考推荐:

Android SMS Messaging


更多相关文章

  1. Android(安卓)发送短信 sms
  2. 向模拟器发短信打电话的方法
  3. android获取手机中的短信和,android获取手机通讯录联系人和号码
  4. Android之使用ContentResolver对通信录中的数据进行简单操作
  5. 2011.09.26(4)——— android sample之Notepad(BaseColums)
  6. 拦截短信,不让系统发通知
  7. 2011.09.26(4)——— android sample之Notepad(BaseColums)
  8. Android(安卓)Tips: 打电话和发短信
  9. 【Android(安卓)应用开发】 Android(安卓)相关代码规范 更新中 .

随机推荐

  1. 在Android下抓包
  2. Android(安卓)Studio 检测内存泄漏与解决
  3. 2012年总结
  4. 在cmd窗口中查询android的sqlite3数据库
  5. Android中Fragment嵌套Fragment,切换Fragm
  6. 【Android(安卓)Developers Training】 7
  7. Android内存溢出的解决方法(VMRuntime.get
  8. Android四种模式里隐含的哲学
  9. ubuntu 下android 真机调试配置
  10. Android(安卓)DataBinding完全解析