android会把短信信心保存在数据库中,可查看/dbdata/databases/com.android.providers.telephony/mmssms.db。但是我们不能直接访问数据库,只能通过ContentProvider来访问它。 以下是访问短信数据库的uri content://sms/inbox 收件箱 content://sms/sent 已发送 content://sms/draft 草稿 content://sms/outbox 发件箱 content://sms/failed 发送失败 content://sms/queued 待发送列表 数据库相关字段如下: _id 一个自增字段,从1开始 thread_id 序号,同一发信人的id相同 address 发件人手机号码(根据这个查找联系人姓名?) person 联系人列表里的序号,陌生人为null date 发件日期,单位是milliseconds,从1970/01/01至今所经过的时间) 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 检索数据方法很简单: 在Activity中 Java代码 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()); } 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(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 参数依次为 uri 上面已列出 查询字段 查询字段数组,也可以将所有需要查询的字段放入一个字符内 比如new String[]{"_id", "thread_id"}和new String[]{"_id,thread_id"}是一致的。 跟SQL一样,字段名不区分大小写 条件 不带Where的SQL 条件字符比如"_id=? And thread_id = ? Or type = '1'" 条件中的参数 参数字符数组,跟上述的条件一一对应 排序 不带Order by排序字符串,比如_id desc, type 如果参数为null,SQL中查询字段为“*”,相关的条件为空白 记得要加上权限 |
android短信
最新推荐文章于 2023-01-04 18:37:54 发布