码迷,mamicode.com
首页 > 移动开发 > 详细

Android 四大组件学习之ContentProvider四

时间:2015-07-24 18:26:13      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:contentprovider给联系人插

上节我们学习了如何去读取系统短信以及插入一条短信到系统中。 本节我们学习如何获取系统的联系人,以及插入一条联系人

好,废话不多说了,直接操作。

首先和读取短信一样,先找到联系人在数据库中的位置。

技术分享

然后导出,查看数据库中的内容

技术分享

上图就是如何到数据库中找打系统的联系人数据,(看起来图画的有点乱,希望能看懂吧)

既然知道如何能到系统的数据库找到数据,那我们就开始写代码实现吧:

public class ReadContactActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_readcontact);
	    
	    
	}
	
	
	public void readContact(View v)
	{
		ContentResolver cr = getContentResolver();
		
		/*
		 * 先到raw_contacts表中拿到contact_id
		 * content://com.android.contacts/raw_contacts是raw_contacts的访问url
		 * */
		Cursor contactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
		while(contactId.moveToNext())
		{
			/*
			 * 拿到contact_id接着到data表中去根据raw_contact_id获取mimetype_id和data1数据
			 * */
			String id = contactId.getString(contactId.getColumnIndex("contact_id"));
			
			/**
			 * "content://com.android.contacts/data"是访问data表的url
			 * 通过id也就是contact_id去data表中找,data1, raw_contact_id, mimetype_id.
			 * 但是, id就是raw_contact_id,所以就不用再找了。而mimetype_id由于Android系统为我们自己优化了一些细节,当你在data表中找mimetype_id是找不到的
			 * android系统直接将mimetype_id转变为找mimetype了
			 */
			Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"), 
					new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{id}, null);
			String email = null, phone = null, name = null;
			while(contactData.moveToNext())
			{
				String data1 = contactData.getString(contactData.getColumnIndex("data1"));
				String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));
				
				/*如果mimetype是邮箱*/
				if("vnd.android.cursor.item/email_v2".equals(mimetype))
				{
					email = data1;
				}//如果mimetype是电话
				else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
					phone = data1;
				}//如果mimetype是名字
				else if  ("vnd.android.cursor.item/name".equals(mimetype)){
					name = data1;
				}
			}
			
			Log.i("ReadContactActivity", id + ';' + name + ";" + phone + ";" + email);
		}
	}
}

打印结果为:

技术分享

上图就是如何获取联系人的操作。

注意: 读取联系人,短信等信息都需要加上权限的:

技术分享


既然知道如何从系统中获取联系人,那就应该会为系统插入一条联系人的记录。

接下来我们实现为系统插入一条联系人记录

Activity的插入的代码:

public void insertContact(View v)
	{
		ContentResolver cr = getContentResolver();
		Cursor cursor = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
		/*如果数据库中没有数据,则插入的就是第一条数据*/
		int contactId = 1;
		if(cursor.moveToLast())
		{
			/*如果有数据,就插入到最新的写一条*/
			int id = cursor.getInt(cursor.getColumnIndex("_id"));
			contactId = id + 1;
		}
		
		ContentValues values = new ContentValues();
		/*将新的id插入到raw_contacts表中*/
		values.put("contact_id", contactId);
		cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
		
		/*插入名字*/
		values.clear();
		values.put("data1", "erlangsheng");
		values.put("mimetype", "vnd.android.cursor.item/name");
		values.put("raw_contact_id", contactId);
		cr.insert(Uri.parse("content://com.android.contacts/data"), values);
		
		/*插入电话*/
		values.clear();
		values.put("data1", "00189890");
		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
		values.put("raw_contact_id", contactId);
		cr.insert(Uri.parse("content://com.android.contacts/data"), values);	
		
	}
}

结果为:


技术分享


以上就是给联系人插入一条记录。







版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 四大组件学习之ContentProvider四

标签:contentprovider给联系人插

原文地址:http://blog.csdn.net/longwang155069/article/details/47039523

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!