android:利用内容提供者操作联系人

原创 2013年12月02日 16:13:45
路径:data/data/com.android.providers.contacts/databases/contact2.db
raw_contacts表 存放联系人的id,一个联系人对应一个id
data表 raw_contact_id外键 mimetype_id是类型 外键,邮箱,地址,电话 存放联系人的数据,
数据存放data1列, 数据类型 mimetype_id 数据属于哪个联系人  raw_contact_id
mimetypes表 定义的数据的类型 5电话 7姓名 1邮箱
如何查询联系人?
1.查询raw_contacts表 获取所有的联系人的id
2.根据联系人的id查询data表 里面data1的数据
查询 数据类型 电话 邮箱 姓名
3.根据mimetype获取数据的类型。
内容提供者 系统联系人的源代码
JB\packages\providers\ContactsProvider 清单文件
主机名  android:authorities="contacts;com.android.contacts",分号隔开,意思是2个都可以,2.1之前是前一个,后来觉着名称可能重复,2.1之后就改成后面的了
如果想兼容的版本比较好一些,用前面的
ContactsProvider2.java里面
找UriMatcher  uri的匹配路径
查询的是  视图 view_raw_contacts  view_data 
如果想看是查询的哪个表,可以把  getContentResolver().query(dataUri, new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, "id");最后一个参数故意写错会在日志中显示sql语句
java代码
public void readContact(View view){
		//利用内容提供者获取联系人的数据库
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri=Uri.parse("content://com.android.contacts/data");
		//1.查询row_content表里面所有联系人的id
		Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, "_id desc");
		StringBuilder sb=new StringBuilder();
		while (cursor.moveToNext()) {
			String id = cursor.getString(0);
			//判断这个联系人是否被删除
			if(TextUtils.isEmpty(id))continue;
			System.out.println(id);
			//2.根据联系人查询data表里面的数据
			Cursor datacursor = getContentResolver().query(dataUri, /*new String[]{"data1","mimetype"}*/null, "contact_id=?", new String[]{id}, null);
			while (datacursor.moveToNext()) {
				String data1 = datacursor.getString(datacursor.getColumnIndex("data1"));
				String mimetype = datacursor.getString(datacursor.getColumnIndex("mimetype"));
				if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
					sb.append("电话:"+data1);
				}else if("vnd.android.cursor.item/email_v2".equals(mimetype)){
					sb.append("邮箱:"+data1);
				}else if("vnd.android.cursor.item/name".equals(mimetype)){
					sb.append("姓名:"+data1);
				}
			}
			sb.append("---------------------------\n");
			datacursor.close();
		}
		cursor.close();
		tv_show.setText(sb.toString());
	}


如何添加一个联系人?
1.向raw_contact表添加一个联系人的id
2.分别向data表里面 添加联系人的电话 邮箱 姓名

java代码

 

	public void addContact(View view){
		//添加联系人信息
		EditText et_name = (EditText) findViewById(R.id.et_name);
		EditText et_phone = (EditText) findViewById(R.id.et_phone);
		EditText et_email = (EditText) findViewById(R.id.et_email);
		//利用内容提供者获取联系人的数据库
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri=Uri.parse("content://com.android.contacts/data");
		//1.添加raw_contact表一个联系人的id 
		//新的联系人的id=查询最后一个联系人的id+1;
		Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
		cursor.moveToLast();
		int lastid=cursor.getInt(0);
		int id=lastid+1;
		ContentValues values=new ContentValues();
		values.put("contact_id", id);
		getContentResolver().insert(uri, values);
		//2.向data表添加数据 姓名
		ContentValues datavalues=new ContentValues();
		datavalues.put("raw_contact_id", id);
		datavalues.put("mimetype", "vnd.android.cursor.item/name");
		datavalues.put("data1", et_name.getText().toString());
		getContentResolver().insert(dataUri, datavalues);
		
		// 邮箱
		ContentValues emailalues=new ContentValues();
		emailalues.put("raw_contact_id", id);
		emailalues.put("mimetype", "vnd.android.cursor.item/email_v2");
		emailalues.put("data1", et_email.getText().toString());
		getContentResolver().insert(dataUri, emailalues);
		
	}

Android例子—内容提供者操作手机联系人

简单的读取手机联系人核心代码private void getContacts(){ //①查询raw_contacts表获得联系人的id ContentResolver resolve...

Android通过内容提供者读取联系人

  • 2016年08月25日 16:31
  • 3.28MB
  • 下载

内容提供者ContentProvider共享数据,监控短信,操作联系人

ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider...

android 使用内容提供者获取手机联系人

直接上代码:清单文件中的权限: //读联系人的权限 //写联系人的权限 获取联系人代码:privat...

Android读写联系人数据(内容提供者应用)

转载 先加二个读和写权限:      package com.eboy.test; import java.util.ArrayList; import...

android内容提供者contentProvider_插入联系人

一、项目目录结构 二、activity_main.xml界面 三、activity_main.xml代码

android中添加通过内容提供者添加联系人

import java.util.ArrayList; import android.content.ContentProviderOperation; import android.content...
  • lht0211
  • lht0211
  • 2013年04月20日 12:10
  • 623

android内容提供者contentProvider_查询联系人

一、项目目录结构 二、MainActivity.java代码 package com.zgs.queryContacts; import java.util.List; import andr...

Android根据内容提供者获得联系人信息实例

获取手机联系人信息这一十分常用的功能,最近项目里也要实现此功能,想到以后的APP还十分可能还有此功能,就干脆把这个小功能放到一个类中去,这样以后再遇到这个需求就不需要再去写代码了,直接把这个类拷过来就...

Android基础笔记(十四)- 内容提供者读取联系人

利用内容提供者读取联系人 利用内容提供者插入联系人 内容观察者的原理 利用内容观察者监听系统应用数据库或者自己应用数据库的变化 利用内容提供者读取联系人读取联系人相对于读取短信来说就复杂很多了,我们一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android:利用内容提供者操作联系人
举报原因:
原因补充:

(最多只允许输入30个字)