SmsProvider, MmsProvider, MmsSmsProvider利用MmsSmsDatabaseHelper来操作数据库。

1. MmsSmsDatabaseHelper继承了SQLiteOpenHelper。

public class MmsSmsDatabaseHelper extends SQLiteOpenHelper

它至少需要实现三个方法:构造方法、onCreate方法、onUpdate方法。

2. 实现私有构造方法。

private MmsSmsDatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

mContext = context;
}

3. 通过getInstance()方法获取MmsSmsDatabaseHelper的一个实例。

static synchronized MmsSmsDatabaseHelper getInstance(Context context) {
    if (sInstance == null) {
        sInstance = new MmsSmsDatabaseHelper(context);
    }
    return sInstance;
}

4. 在onCreate()方法中创建数据库表、触发器、索引。

@Override
public void onCreate(SQLiteDatabase db) {
    createMmsTables(db);
    createSmsTables(db);
    createCommonTables(db);
    createCommonTriggers(db);
    createMmsTriggers(db);
    createWordsTables(db);
    createIndices(db);
}

5. 实现了onUpgrade()方法。

public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion)

6. 在createCommonTables(db)方法中

(1)创建表threads表。

This table maps the subject and an ordered set of recipient IDs, separated by spaces, to a unique thread ID.  The IDs come from the canonical_addresses table.  This works because messages are considered to be part of the same thread if they have the same subject (or a null subject) and the same set of recipients.

db.execSQL("CREATE TABLE threads (" +
           Threads._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
           Threads.DATE + " INTEGER DEFAULT 0," +
           Threads.MESSAGE_COUNT + " INTEGER DEFAULT 0," +
           Threads.RECIPIENT_IDS + " TEXT," +
           Threads.SNIPPET + " TEXT," +
           Threads.SNIPPET_CHARSET + " INTEGER DEFAULT 0," +
           Threads.READ + " INTEGER DEFAULT 1," +
           Threads.TYPE + " INTEGER DEFAULT 0," +
           Threads.ERROR + " INTEGER DEFAULT 0," +
           Threads.HAS_ATTACHMENT + " INTEGER DEFAULT 0);");

(2)创建canonical_addresses表。

This table maps the first instance seen of any particular MMS/SMS address to an ID, which is then used as its canonical(标准的,权威的) representation.  If the same address or an equivalent address (as determined by our Sqlite PHONE_NUMBERS_EQUAL extension) is seen later, this same ID will be used. The _id is created with AUTOINCREMENT so it will never be reused again if a recipient is deleted.

db.execSQL("CREATE TABLE canonical_addresses (" +
           "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
           "address TEXT);");

(3)创建sms表。

字段status解析:a TP-Status value or -1 if it status hasn't been received。

db.execSQL("CREATE TABLE sms (" +
           "_id INTEGER PRIMARY KEY," +
           "thread_id INTEGER," +
           "address TEXT," +
           "person INTEGER," +
           "date INTEGER," +
           "date_sent INTEGER DEFAULT 0," +
           "protocol INTEGER," +
           "read INTEGER DEFAULT 0," +
           "status INTEGER DEFAULT -1," + 
           "type INTEGER," +
           "reply_path_present INTEGER," +
           "subject TEXT," +
           "body TEXT," +
           "service_center TEXT," +
           "locked INTEGER DEFAULT 0," +
           "error_code INTEGER DEFAULT 0," +
           "seen INTEGER DEFAULT 0" +
           ");");

com.android.providers.telephony.MmsSmsDatabaseHelper相关推荐

  1. android 数据业务,【Android架构Telephony篇】之数据业务(一)

    Android: 4.4.4 Desktop: Ubuntu 15.04 这里只做一些准备事情. 不得不说,Android里的Telephony模块还是挺复杂的,要想搞个八九分清楚需要花点功夫.今天把 ...

  2. 解决 java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts报错

    java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.Cont ...

  3. 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...

    1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前 ...

  4. android TeleComm Telephony Dialer之间的说明

    安卓在5.0之后在TeleService和IncallUI之间多加了一层TeleComm,个人感觉是不想让IncallUI和Phone进程联系过于紧密,也便于其他通话方式的添加(不仅仅局限于通过电信运 ...

  5. 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构

    1.1 智能手机的系统结构 Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构. 随着通信领域的快速发展,移动终端发 ...

  6. SecurityException: Uid 0312 does not have permission content://com.android.providers...

    在小米六上获取相册剪裁图片的时候碰上的.最后自己一行行删除代码 删掉这一句后,好了,原因不明,也忘了为什么自己加了这一句. // 7.0加入访问权限 // intent.addFlags(Intent ...

  7. Android 短信解析

    URI主要有: content://sms/               所有短信 content://sms/inbox        收件箱 content://sms/sent         ...

  8. 仿小米增加短信的收藏功能

    本人一直在手机ODM公司做Android开发,不是纯应用开发,和大多数Android应用开发有点区别.偶尔也会做一些系统应用上的需求开发以及个人兴趣会看看app应用和动手操作.平时的总结都是保存在本地 ...

  9. 使用ContentObserver实现短信提醒功能

    通过查询语句:Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://sms"), nul ...

最新文章

  1. java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解
  2. 互联网1分钟 |1210
  3. Linux创建文件系统及设置分区卷标
  4. coredata 数据库升级
  5. 如何向本地MSDN帮助库中添加和修改一些帮助内容
  6. echart关系树状图_干货 | 25个常用Matplotlib图的Python代码
  7. 计算机基础:存储系统知识笔记(二)
  8. 快速实现一个室内空气质量检测仪
  9. edpluse怎么运行c语言,[JSP]小菜也来学Editplus+Tomcat配置jsp运行环境
  10. 《Scikit-Learn与TensorFlow机器学习实用指南》第16章 强化学习
  11. android byte转string_高性能AES256对称加解密,兼容Java、IOS、Android
  12. docker 删除image_不是吧!Docker上手,看会觉得自己又行了!
  13. 【matlab】三维曲面(矩形网格---meshgrid)
  14. CSliderCtrl(滑块)控件
  15. [ROS]1 小乌龟
  16. python 邮件服务器_python SMTP邮件服务
  17. arm-linux-gcc camke,Window平台基于CMake与linaro交叉编译arm程序
  18. 三菱化学控股公司:关于代表执行董事的人事变动通知
  19. 谁在“盘”物联网的“网”?
  20. TZT3801G无线振弦在线监测系统

热门文章

  1. 阿里感悟(十三)降低成本的敏捷设计
  2. 【转载】设置Windows中gvim的默认配色方案和字体
  3. 设计模式(八)之单例模式
  4. Nokia House”或“NoHo
  5. 计算机模型与体系架构的发展——从图灵机到云计算机1
  6. ONAP — Overview
  7. 数据中心网络架构 — 云数据中心网络 — 新型叶脊二层网络架构
  8. Kata Container — Overview
  9. Go 语言编程 — gorm ORM 框架
  10. Linux_系统时间管理