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 使用Telephony API

    Android 使用Telephony API public class TelephonyDemo extends Activity { TextView textOut; TelephonyMan ...

  2. 真机无法接收到android.provider.Telephony.SMS_RECEIVED的问题

    小米2S有一个设定会导致,App无法接收到android.provider.Telephony.SMS_RECEIVED广播. 解决方案 关闭系统短信优先设置 短信-设置-高级设置-系统短信优先   ...

  3. import android.provider.Telephony cannot be resolved

    android.provider.Telephony is hidden. http://androidxref.com/4.0.3_r1/xref/frameworks/base/core/java ...

  4. Android -- com.android.providers.media,external.db

    external.db android是管理多媒体文件(音频.视频.图片)的信息是在/data/data/com.android.providers.media下的数据库文件external.db. ...

  5. java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/20 from pid=711, uid=10074 requires android.permission.READ_

    java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider ur ...

  6. 接收新信息,在会话中看不到(thread表数据插入/更新失败)

    分析原因:收到短信,sms表插入信息,触发器会自动更新thread表,更新失败导致一直有一条未读信息数量显示,但在会话列表中却看不到. (偶现,低概率. 解决方法:接收新信息插入后,立即查询threa ...

  7. android 管理手机短信

    为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mm ...

  8. (转)[Android实例] 关于使用ContentObserver监听不到删除短信会话的解决方案

    最近做通讯录的项目,需要实时监听短信的删除,就用到了观察者ContentObserver,怪异的事情就此发生,当我删除一条短信的时候,可以监听到,但是,当我删除整条短信的时候,就无法监听到,查了很多资 ...

  9. android 中管理短信

    为了看代码方便,一边在网上google资料,一边看Android java 源代码. 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mm ...

随机推荐

  1. 如何得知当前机器上安装的PowerShell是什么版本的?

    $PSVersionTable.PSVersion   参考资料 ================ http://stackoverflow.com/questions/1825585/determi ...

  2. CentOS6 安装并破解Jira 7

    CentOS6 安装并破解Jira 7 JIRA软件是为您的软件团队的每个成员构建的,用来规划,跟踪和发布优秀的软件. https://confluence.atlassian.... 最低硬件要求及 ...

  3. 知乎:GAN 的发展对于研究通用人工智能有什么意义?

    https://www.zhihu.com/question/57668112/answer/155367561 Lyken 愿以有涯随无涯 收录于 编辑推荐知乎圆桌 · 296 人赞同了该回答 资历 ...

  4. 基于IE的多标签的浏览器-世界之窗2.4

    经常在Win32服务器上打开网页,但可能只是打开一个网页或是下载一点东西而已,虽然默认的IE浏览器基本上能满足需求 但还是存在不少的不便,比如如果要打开多个网页的话则需要再打开一个IE,还有就是习惯了 ...

  5. vc2008中mfc菜单、控件等汉字显示为问号或乱码的解决方法

    在vc2008中建立基于mfc的project.在向导的Application type页面中如果在resource language选项中选择"英语(美国)"(图一),那么在pr ...

  6. matlab之simulink仿真入门

    Matlab Simulink仿真工具的应用 ****Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包含连续系统.离散系统和混合 ...

  7. Activity设置Dialog属性点击区域外消失实现方式

    通过配置:<item name="android:windowCloseOnTouchOutside">true</item> 通过代码:setFinish ...

  8. WampServer在win10系统下安装的坑

    WampServer之前一直是好好的,最近换了Win10的系统,安装的不太顺利. 1.问题一 出现的第一个问题,就是安装时会报错.怎么解决的,具体的我已经忘记了,好像是要下载vc运行时包. 2.问题二 ...

  9. PHP http_build_query()方法

    http_build_query (PHP 5) http_build_query -- 生成 url-encoded 之后的请求字符串描述 string http_build_query ( arr ...

  10. 【树莓派】树莓派上面安装配置teamviewer

    访问树莓派桌面,的另一种方式,就是使用Teamviewer. 参考这篇文章做了实验:http://www.linuxdiyf.com/linux/16887.html,对其中部分进行了件要整理和总结. ...