(内容提供者)查询和添加联系人

1.      手机联系人数据库:data/data/com.android.provides.contacts/databases

------两个表:raw_contacts表和data表------关联表

2.      查询:

a. 去raw_contacts表中取所有联系人的_id

b. 去data表中根据上面取到的_id查询对应id的数据.

3.      添加

a.  在raw_contacts表中添加一个记录
b.  根据上面添加记录的id, 取data表中添加三条数据

1.      查看联系人的内容提供者的uri:Android源码—packages—providers—(根据应用包名找)ContactsProvider—把文件夹导入  eclipse(Import Projects)

 源码中找—清单文件中找Provider;

3.    查询raw_contacts表 的uri:content://com.android.contacts/raw_contacts

       查询data表的uri:       content://com.android.contacts/data

4.    读SD卡权限


1.输出cursor的方法,把cursor所有内容输出

//输出cursor的方法,把cursor所有内容输出
	private void printCursor(Cursor cursor) {
		if(cursor != null && cursor.getCount() > 0) {
			
			while(cursor.moveToNext()) {
				
				int columnCount = cursor.getColumnCount(); // 列的总数
				
				for (int i = 0; i < columnCount; i++) {
					String columnName = cursor.getColumnName(i);	// 取对应i位置的列的名称
					String columnValue = cursor.getString(i); // 取出对应i位置的列的值
					
					Log.i(TAG, "当前是第" + cursor.getPosition() + "行: " + columnName + " = " + columnValue);
				}
			}
			cursor.close();
		}
	}

2.查询联系人

public void queryContacts(View v) {
		// 1. 去raw_contacts表中取所有联系人的_id
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri = Uri.parse("content://com.android.contacts/data");
		
		Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);//只要_id列的内容,第二个参数为列名
//		printCursor(cursor);
//              以下是取出只有_id的cursor
		if(cursor != null && cursor.getCount() > 0) {
			
			while(cursor.moveToNext()) {
				int id = cursor.getInt(0);   //只有一个列,所以getInt(0)为id;
				// 2. 去data表中根据上面取到的_id查询对应id的数据.
				
				String selection = "raw_contact_id = ?";    //选择条件
				String[] selectionArgs = {String.valueOf(id)};//选择条件,如果raw_contact_id =id
				Cursor c = getContentResolver().query(dataUri, new String[]{"data1", "mimetype"}, 
                                              selection, selectionArgs, null);                  //第二个参数为列名,把mimetype_id变成mimetype;第三,第四为选择条件
				if(c != null && c.getCount() > 0) {
					
					while(c.moveToNext()) {
						String mimetype = c.getString(1);		// 当前取的是mimetype的值
						String data1 = c.getString(0);		// 当前取的是data1数据
						
						if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {//如果等于手机号
							Log.i(TAG, "号码: " + data1);
						} else if("vnd.android.cursor.item/name".equals(mimetype)) {//如果等于姓名
							Log.i(TAG, "姓名: " + data1);
						} else if("vnd.android.cursor.item/email_v2".equals(mimetype)) {//如果等于邮箱
							Log.i(TAG, "邮箱: " + data1);
						}
					}
					c.close();
				}
			}
			cursor.close();
		}

	}

3.添加联系人

public void addContacts(View v) {
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri = Uri.parse("content://com.android.contacts/data");
		// 1. 在raw_contacts表中添加一个记录
		
		// 取raw_contacts表中contact_id的值
		Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, "contact_id desc limit 1");
		if(cursor != null && cursor.moveToFirst()) {
			int contact_id = cursor.getInt(0);
			contact_id ++;
			cursor.close();
			
			ContentValues values = new ContentValues();
			values.put("contact_id", contact_id);
			getContentResolver().insert(uri, values);

			// 2. 根据上面添加记录的id, 取data表中添加三条数据
			
			// 存号码
			values = new ContentValues();
			values.put("mimetype", "vnd.android.cursor.item/phone_v2");
			values.put("data1", "10086");
			values.put("raw_contact_id", contact_id);
			getContentResolver().insert(dataUri, values);
			
			// 存姓名
			values = new ContentValues();
			values.put("mimetype", "vnd.android.cursor.item/name");
			values.put("data1", "中国移动");
			values.put("raw_contact_id", contact_id);
			getContentResolver().insert(dataUri, values);
			
			// 存姓名
			values = new ContentValues();
			values.put("mimetype", "vnd.android.cursor.item/email_v2");
			values.put("data1", "10086@kengni.com");
			values.put("raw_contact_id", contact_id);
			getContentResolver().insert(dataUri, values);
		}

	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值