【Android】短信管理代码

先贴出相关的协议:
content://sms/inbox        收件箱
content://sms/sent        已发送
content://sms/draft        草稿
content://sms/outbox        发件箱
content://sms/failed        发送失败
content://sms/queued        待发送列表


在模拟器上Outbox没有查询到数据,在模拟器上找了老半天也没找到发件箱,很郁闷。
数据库中sms相关的字段如下:

_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  

检索数据方法很简单:

Uri uri = Uri.parse("content://sms/inbox");            Cursor cur = this.managedQuery(uri, null, null, null, null);            if (cur.moveToFirst()) {                do{            for(int j = 0; j < cur.getColumnCount(); j++){                    info = "name:" + cur.getColumnName(j) + "=" + cur.getString(j);                Log.i("====>", info);            }        }while(cur.moveToNext());         }  

managedQuery最终也要将参数转换为SQL语句向SQLite发送消息,因此参数跟SQL语句很类似,所以可以在查询字段中加入SQL函数,
比如new String[] projection = new String[]{“count(*) as count”}等等。
managedQuery中的参数依次为uri,
查询字段 查询字段数组,也可以将所有需要查询的字段放入一个字符内
比如new projection[]{“_id”, “thread_id”}和new projection[]{“_id,thread_id”}是一致的。
跟SQL一样,字段名不区分大小写
条件 不带Where的SQL 条件字符,如果有参数则用?替代,比如”_id=? And thread_id = ? Or type = ’1′”
条件中的参数 参数字符数组,跟上述的条件一一对应
排序 不带Order by排序字符串,比如_id desc, type
如果参数为null,SQL中查询字段为“*”,相关的条件为空白
还可以用getContentResolver()获得一个ContentResolver,
getContentResolver().query()同样返回一个Cursor对象,参数跟managedQuery一致。
不过用ContentResolver对象去更新、删除和插入一条数据时报SecurityException。看来没有权限,在Manifest.xml中加入权限:


然后删除短信:
this.getContentResolver().delete(Uri.parse(“content://sms”), “_id=?”, new String[]{“3″});
删除成功。
Url中content://sms 替换成content://sms/ 也成功,但是其它url时程序报错,比如content://sms/inbox
看了一下Android的源代码,sms支持的协议有:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfxgy.html