通讯录代码

package cn.test;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.test.AndroidTestCase;
import android.util.Log;

public class TestContact extends AndroidTestCase {
	private static final String TAG = "TESTCONTACT";
	private ContentResolver contentResolver;
	// 访问通讯录中的所有联系人
	public void testContacts() {
		contentResolver = this.getContext().getContentResolver();
		Uri allContactsUri = Uri.parse("content://com.android.contacts/contacts");
		Cursor allContactsCursor = contentResolver.query(allContactsUri, null,null, null, null);// 从contacts表中得到所有联系人
		StringBuilder builder = new StringBuilder();
		while (allContactsCursor.moveToNext()) {
			int _id = allContactsCursor.getInt(allContactsCursor.getColumnIndex("_id"));
			builder.append("_id=" + _id).append(",");
			Uri perContactUri = Uri.parse("content://com.android.contacts/contacts/" + _id+ "/data");
			Cursor perContactsCursor = contentResolver.query(perContactUri,null, null, null, null);// 得到某个id在data表中的所有数据
			while (perContactsCursor.moveToNext()) {
				// 以下两句涉及到关联查询  data表和mimetype表进行     
				String data1 = perContactsCursor.getString(perContactsCursor.getColumnIndex("data1"));// 得到每个联系人的每个data1
				String mimetype = perContactsCursor.getString(perContactsCursor.getColumnIndex("mimetype"));//判断此data1到底是什么含义
				if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
					builder.append("phone=").append(data1).append(",");
				} else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
					builder.append("email=").append(data1).append(",");
				} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
					builder.append("name=").append(data1).append(",");
				}
			}
			perContactsCursor.close();
		}
		allContactsCursor.close();
		Log.i(TAG, builder.toString());
	}
	//根据电话号码查询出联系人的姓名
	public void getNameByTele(){
		contentResolver = this.getContext().getContentResolver();
		Uri teleUri = Uri.parse("content://com.android.contacts/data/phones/filter/12345");
		// 以下两句涉及到关联查询  data表和raw_contacts表  
		//Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null);
		//name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name"));
		Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null);
		String name="";
		while(oneContactCursor.moveToNext()){
			name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name"));
		}
		Log.i(TAG,name);
	}
	
	//向通讯录中添加联系人
	//首先是更新raw_contacts表,表中有一个_id,然后再更新data表,把详细的信息放在此表中
	//并不是先更新data表后更新raw_contacts表.因为data表中有一个外键raw_contact_id与表Raw_contacts的主键_id是一致的	
	//raw_contacts表中除了_id以外,其实都是在data表更新后才更新的.
	//第一步:我们向raw_contacts表中添加一条空的数据即可.为了得到其自动增长的主键_id
	//第二步:更新data表中的数据
	//somebody's code
	public void testAddContact1() {
		//以下为第一步
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver = this.getContext().getContentResolver();
		ContentValues values = new ContentValues();
		Uri insertUri = resolver.insert(uri, values);
		long contactid = ContentUris.parseId(insertUri);
		//以下为第二步
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		values.put(StructuredName.GIVEN_NAME, "张三");
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);
		
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
		values.put(Phone.NUMBER, "1386595955");
		values.put(Phone.TYPE, Phone.TYPE_MOBILE);
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);
		
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
		values.put(Email.DATA, "test@sina.com");
		values.put(Email.TYPE, Email.TYPE_HOME);
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);
	}
	
	//多个操作在同一个事务中执行
	//要求对以上的几个操作用事务进行管理
	//somebody's code
	public void testAddContact2() throws Exception{
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver = this.getContext().getContentResolver();
		ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();	
		ContentProviderOperation rawcontactOperation = ContentProviderOperation.newInsert(uri)
														.withValue("account_name", null).build();
		operations.add(rawcontactOperation);
		
		uri = Uri.parse("content://com.android.contacts/data");
		ContentProviderOperation dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/name")
		.withValue("data2", "李白").build();		
		operations.add(dataOperation);
		
		uri = Uri.parse("content://com.android.contacts/data");
		dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
		.withValue("data1", "1386595955")
		.withValue("data2", Phone.TYPE_MOBILE)
		.build();		
		operations.add(dataOperation);
		
		uri = Uri.parse("content://com.android.contacts/data");
		dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/email_v2")
		.withValue("data1", "test@sina.com")
		.withValue("data2", Email.TYPE_HOME)
		.build();		
		operations.add(dataOperation);
		
		resolver.applyBatch("com.android.contacts", operations);
		
	}
}

抱歉,我是AI语言模型,无法提供完整的python通讯录代码。但是,以下是一个简单的python通讯录代码示例,可以帮助您开始编写自己的通讯录应用程序: ```python # 定义一个空字典,用于存储联系人信息 contacts = {} # 添加联系人 def add_contact(name, phone): contacts[name] = phone print(f"{name} 已添加到通讯录") # 删除联系人 def delete_contact(name): if name in contacts: del contacts[name] print(f"{name} 已从通讯录中删除") else: print(f"{name} 不在通讯录中") # 更新联系人手机号码 def update_phone(name, phone): if name in contacts: contacts[name] = phone print(f"{name} 的手机号码已更新为 {phone}") else: print(f"{name} 不在通讯录中") # 查找联系人 def find_contact(name): if name in contacts: print(f"{name} 的手机号码是 {contacts[name]}") else: print(f"{name} 不在通讯录中") # 列出所有联系人 def list_contacts(): if len(contacts) == 0: print("通讯录是空的") else: for name, phone in contacts.items(): print(f"{name}: {phone}") # 主程序 while True: print("\n选择一个选项:") print("1. 添加联系人") print("2. 删除联系人") print("3. 更新联系人手机号码") print("4. 查找联系人") print("5. 列出所有联系人") print("6. 退出程序") choice = input("> ") if choice == "1": name = input("请输入联系人姓名:") phone = input("请输入手机号码:") add_contact(name, phone) elif choice == "2": name = input("请输入要删除的联系人姓名:") delete_contact(name) elif choice == "3": name = input("请输入要更新的联系人姓名:") phone = input("请输入新的手机号码:") update_phone(name, phone) elif choice == "4": name = input("请输入要查找的联系人姓名:") find_contact(name) elif choice == "5": list_contacts() elif choice == "6": print("程序已退出") break else: print("无效的选项,请重新选择") ``` 注意,这只是一个简单的示例,可以根据您的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷哥的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值