Android下短信管理

Feb 01, 2011

获取短信是SMS Backup这个应用比较关键的一部,android下的短信、视频、通讯录都是通过sqlite管理的。 首先关注到的是SQLiteDatabase类,在Android SDK中看其详细说明,其主要接口如下:

返回值 函数原型
long insert(String table, String nullColumnHack, ContentValues values)Convenience method for inserting a row into the database.
Int delete(String table, String whereClause, String[] whereArgs)Convenience method for deleting rows in the database.
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)Query the given table, returning a Cursor over the result set.
Int update(String table, ContentValues values, String whereClause, String[] whereArgs)Convenience method for updating rows in the database.

以上摘自:http://www.moandroid.com/?p=112 管理短信就是操作数据库的过程,不过在这之前我们得首先了解下短信存储在数据库中的相关字段信息:

_id             一个自增字段,从1开始
thread_id    序号,同一发信人的id相同
address      发件人手机号码
person        联系人列表里的序号,陌生人为null
date           发件日期
protocol      协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO
read           是否阅读 0未读, 1已读
status         状态 -1接收,0 complete, 64 pending, 128 failed
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

访问数据库的协议:

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

以上摘自:http://www.cnblogs.com/GnagWang/archive/2011/01/06/1929075.html

下面我们着重了解下SMS Backup中出现的query这个操作的实现:

    private Cursor getItemsToSync() {
        ContentResolver r = getContentResolver();
        String selection = String.format("%s > ? AND %s <> ?",           //挑选比getMaxSyncedDate()晚,而且非草稿的短信
                SmsConsts.DATE, SmsConsts.TYPE);
        String[] selectionArgs = new String[] {
                String.valueOf(getMaxSyncedDate()), String.valueOf(SmsConsts.MESSAGE_TYPE_DRAFT)   //获取时间,短信类型
        };
        String sortOrder = SmsConsts.DATE + " LIMIT " + PrefStore.getMaxItemsPerSync(this);   //按时间顺序,在最大短信数目范围内排序
        return r.query(Uri.parse("content://sms"), null, selection, selectionArgs, sortOrder);    //返回所有符合要求的短信的序列
    }

解释一下上述代码: query()的函数原型是

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 假如query操作对应的sqlite语句为“select * from anyTable where var='const'”。则anyTable就是uri,*就是projection,selection是“var=?",selectionArgs写成这样:new String[]{'const‘},最后一个是排序方式。

Posted by admin android , SMS manage , sqlite , 短信管理

Comments

  1. Message :si: :nu: :lian: :hanx: :han: :e:

    Avatar

Get In Touch With Us ...