短信联系人操作

操作之前要添加相应的读写权限

1。短信数据库主要是用到了sms表中的4个字段:

* body:短信内容
* address:短信的发件人或收件人号码(跟你聊天那哥们的号码)
* date:短信时间
* type:1为收到,2为发送
读取系统短信,首先查询源码获得短信数据库内容提供者的主机名和路径,代码如下:

ContentResolver cr = getContentResolver();
		Cursor c = cr.query(Uri.parse("content://sms"), new String[]{"body", "date", "address", "type"}, null, null, null);
		while(c.moveToNext()){
			String body = c.getString(0);
			String date = c.getString(1);
			String address = c.getString(2);
			String type = c.getString(3);
			System.out.println(body+";" + date + ";" + address + ";" + type);
		}

插入短信

ContentResolver cr = getContentResolver();
		ContentValues cv = new ContentValues();
		cv.put("body", "sssssssss");
		cv.put("address", 95555);
		cv.put("type", 1);
		cv.put("date", System.currentTimeMillis());
		cr.insert(Uri.parse("content://sms"), cv);
2.联系人数据库主要关注3张表

* raw\_contacts表:
* contact_id:联系人id
* data表:联系人的具体信息,一个信息占一行
* data1:信息的具体内容
* raw\_contact_id:联系人id,描述信息属于哪个联系人
* mimetype_id:描述信息是属于什么类型
* mimetypes表:通过mimetype_id到该表查看具体类型

读取联系人首先在 raw\_contacts表中读取到联系人id再根据id在date表中查询具体内容,(系统自己处理了根据mimetype_id查询mimetype,所以返回的结果没有mimetype_id,而是直接返回mimetype)

// 先查询raw\_contacts表拿到联系人id

		Cursor cursor = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
// 然后拿着联系人id去data表查询属于该联系人的信息

		Cursor c = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{contactId}, null);
// 得到data1字段的值,就是联系人的信息,通过mimetype判断是什么类型的信息

		while(c.moveToNext()){
			String data1 = c.getString(0);
			String mimetype = c.getString(1);
			if("vnd.android.cursor.item/email_v2".equals(mimetype)){
				contact.setEmail(data1);
			}
			else if("vnd.android.cursor.item/name".equals(mimetype)){
				contact.setName(data1);
			}
			else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
				contact.setPhone(data1);
			}
		}
插入联系人,要注意。根据联系人表的_id确定要插入的联系人的id是多少(_id+1)

// 先查询raw\_contacts表的_id主键,确定新的联系人的id应该是多少:主键+1
// 把确定的联系人id插入raw\_contacts表

ContentResolver cr = getContentResolver();
    	//先查询raw_contacts表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的id
    	Cursor cursorContactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
    	//默认联系人id就是1
    	int contact_id = 1;
    	if(cursorContactId.moveToLast()){
    		//拿到主键
    		int _id = cursorContactId.getInt(0);
    		//主键+1,就是要插入的联系人id
    		contact_id = ++_id;
    	}
    	
    	ContentValues values = new ContentValues();
    	values.put("contact_id", contact_id);
    	//把联系人id插入raw_contacts数据库
    	cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
    	//插入姓名
    	values.clear();
    	values.put("data1", "二");
    	values.put("mimetype", "vnd.android.cursor.item/name");
    	values.put("raw_contact_id", contact_id);
    	cr.insert(Uri.parse("content://com.android.contacts/data"), values);
    	//插入电话号码
    	values.clear();
    	values.put("data1", "1344567");
    	values.put("mimetype", "vnd.android.cursor.item/phone_v2");
    	values.put("raw_contact_id", contact_id);
    	cr.insert(Uri.parse("content://com.android.contacts/data"), values);
。。。。。。//插入此联系人的其他信息





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值