`
uule
  • 浏览: 6338306 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

ContactsContract获取联系人信息

 
阅读更多

一、 从Android 2.0 SDK开始有关联系人provider的类变成了ContactsContract,虽然老的android.provider.Contacts能用,但是在SDK中标记为为deprecated将被放弃不推荐的方法,而从Android 2.0及API Level为5开始新增了android.provider.ContactsContract来代替原来的方法。
ContactsContract的子类ContactsContract.Contacts是一张表,代表了所有联系人的统计信息。比如联系人ID(—ID),查询键(LOOKUP_KEY),联系人的姓名(DISPLAY_NAME_PRIMARY),头像的id(PHOTO_ID)以及群组的id等等。

我们可以通过以下的方法取得所有联系人的表的Cursor对象:
1)ContentResolver contentResolver=getContentResolver();//获取 ContentResolver对象查询在ContentProvider里定义的共享对象;

2)Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
   //根据URI对象ContactsContract.Contacts.CONTENT_URI查询所有联系人;

从Cursor对象里我们关键是要取得联系人的_id。通过它,再通过ContactsContract.CommonDataKinds的各个子类查询该_id联系人的电话(ContactsContract.CommonDataKinds.Phone),email(ContactsContract.CommonDataKinds.Email)等等。
以取得该联系人所有电话为例:
1)int idFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts._ID);
   int id=cursor.getInt(idFieldIndex);//根据列名取得该联系人的id;
2)Cursor phonecursor=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{Integer.toString(id)}, null);
 //再类ContactsContract.CommonDataKinds.Phone中根据查询相应id联系人的所有电话;
类似地可以ContactsContract.CommonDataKinds的不同的子类查询不同的内容。android文档告诉我们推荐使用ContactsContract.Contacts.LOOKUP_KEY代替ContactsContract.Contacts._ID。

最后,由于读取联系人比较的占用资源,为了提高用户的体验度。考虑将读取的过程放在线程里完成,推荐使用AsyncTask类。

二、

在2.1中,display_name 在contact表中,而data表中包含很多contact的数据,比如电话,姓名,email等 ,如果要查询一个联系人的姓名和电话,网上大多数的做法是:
先查contact表,得到姓名,再根据has_phone_number是否是1决定data表中有无电话记录。这样是要查发2个uri,得到两个cursor在分别去除需要的内容。
其实可以直接发一个uri就查处姓名和号码,代码:
Cursor c=getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, "mimetype='vnd.android.cursor.item/phone_v2'", null, null);
这个uri对象data,他会去查view_data这个试图,试图定义就是data,raw_contacts,mimetypes,group等一系列表的联合查询,而上面这个uri发出去会得到很多字段,当条件为mimetype=vnd.android.cursor.item/phone_v2则查的是此人电话所对应的那条记录,其中也会得到姓名,
注意:
姓名是根据display_name 取得
电话是根据data1取得

 

Example1:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        Uri contactsUri=ContactsContract.Contacts.CONTENT_URI;
        String[] proj1=new String[]{ContactsContract.Contacts.DISPLAY_NAME,
                                    ContactsContract.Contacts.HAS_PHONE_NUMBER,
                                    ContactsContract.Contacts.LOOKUP_KEY};
        Cursor curContacts=getContentResolver().query(contactsUri,proj1, null, null, null);
           
         ArrayList<String> contactsList=new ArrayList<String>(); 
        String allPhoneNo="";
        if(curContacts.getCount()>0){
            while(curContacts.moveToNext()){   
                // get all the phone numbers if exist
                if(curContacts.getInt(1)>0){
                    allPhoneNo=getAllPhoneNumbers(curContacts.getString(2));
                }
                contactsList.add(curContacts.getString(0)+" , "+allPhoneNo);
                allPhoneNo="";
            }
        }
   
        // binding the data to ListView 
        setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, contactsList));
        ListView lv=getListView();
        lv.setTextFilterEnabled(true);
        
    }
    
    /**
     * Get all the phone numbers of a specific contact person    
     */
    public String getAllPhoneNumbers(String lookUp_Key){
        String allPhoneNo="";
        
        // Phone info are stored in the ContactsContract.Data table 
        Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String[] proj2={ContactsContract.CommonDataKinds.Phone.NUMBER};
        // using lookUp key to search the phone numbers
        String selection=ContactsContract.Data.LOOKUP_KEY+"=?";

        Cursor cur=getContentResolver().query(phoneUri,proj2,selection, new String[]{lookUp_Key}, null);
        while(cur.moveToNext()){
            allPhoneNo+=cur.getString(0)+" ";
        }

        return allPhoneNo;        
    }

来源:http://www.cnblogs.com/ruiyi1987/archive/2011/06/20/2084925.html

 

Example2:

private List<HashMap<String, String>> fillMaps() {
		List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();

		Cursor cur = null;
		try {
			// Query using ContentResolver.query or Activity.managedQuery
			cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
			if (cur.moveToFirst()) {
				int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
				int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
				// Iterate all users
				do {
					String phoneNumber = "";
					String contactId = cur.getString(idColumn);
					String displayName = cur.getString(displayNameColumn);
					// Get number of user's phoneNumbers
					int numberCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
					if (numberCount > 0) {
						Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId
						/*
						 * + " and " + ContactsContract.CommonDataKinds
						 * .Phone.TYPE + "=" + ContactsContract.CommonDataKinds
						 * .Phone.TYPE_MOBILE
						 */, null, null);
						if (phones.moveToFirst()) {
							int numberColumn = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
							do {
								phoneNumber += phones.getString(numberColumn) + ",";
							} while (phones.moveToNext());
						}
					}
					// Add values to items
					HashMap<String, String> i = new HashMap<String, String>();
					i.put("name", displayName);
					i.put("key", phoneNumber);
					items.add(i);
				} while (cur.moveToNext());
			} else {
				HashMap<String, String> i = new HashMap<String, String>();
				i.put("name", "Your Phone");
				i.put("key", "Have No Contacts.");
				items.add(i);
			}
		} finally {
			if (cur != null)
				cur.close();
		}
		return items;
	}

来源:http://www.apkbus.com/android-14565-1-1.html

 

 

 

 

分享到:
评论
1 楼 pzmsignup 2015-05-22  
[b][i][u]
引用
[list]
[0000000000000000000000000000000000000000000000000000000000000000000000000000]
[/list]
[/u][/i][/b]

相关推荐

    android中ContactsContract获取联系人的方法

    它是一个内容提供者(Content Provider),允许应用通过标准的 Uri(统一资源标识符) 查询、插入、更新或删除联系人信息。这篇博客文章《android中ContactsContract获取联系人的方法》深入探讨了如何使用这个API来...

    ContactsContract读取联系人的异步方法

    这篇博客“ContactsContract读取联系人的异步方法”深入探讨了如何利用这个API以非阻塞的方式获取用户联系人信息,这对于提高应用程序性能和用户体验至关重要。下面我们将详细讲解ContactsContract API以及如何实现...

    Android2.0 中读取联系人——ContactsContract

    在Android 2.0及更高版本中,由于SDK对联系人数据的访问方式进行了更新,开发者需要使用新的API来读取和操作联系人信息。本文将详细介绍如何使用`ContactsContract`类来实现这一功能。 在Android 2.0之前,开发人员...

    Android-ContactsContract联系人增删改查

    例如,`ContactsContract.Contacts` 表示联系人信息,`ContactsContract.CommonDataKinds.Phone` 表示联系人的电话号码,`ContactsContract.CommonDataKinds.Email` 表示联系人的电子邮件地址等。 ### 增加联系人 ...

    获取联系人信息进行查看

    要根据电话号码获取联系人信息,首先需要查询`ContactsContract.Data`表,因为该表包含了联系人的具体字段,如电话号码、姓名等。以下是一个基本的查询示例: ```java Uri contactUri = Uri.withAppendedPath...

    Android 简单的获取联系人的信息

    3. 使用ContentResolver查询ContactsContract来获取联系人信息。 4. 从Cursor中提取所需字段,如姓名和电话号码。 通过以上步骤,我们就能实现“Android简单的获取联系人的信息”这一功能。在实际开发中,还需要...

    火山一键获取所有联系人信息类.rar

    在IT行业中,尤其是在移动应用开发领域,获取设备上的联系人信息是一项常见的功能需求。这个"火山一键获取所有联系人信息类.rar"文件很可能是提供了一个Java或Kotlin类,用于在Android系统上方便快捷地获取用户手机...

    Android软件开发之获取通讯录联系人信息

    在Android软件开发中,获取...总之,Android软件开发中获取通讯录联系人信息的过程涉及权限管理、ContentResolver和ContactsContract类的使用。通过合理的代码设计和权限控制,开发者可以安全、高效地实现这一功能。

    android 联系人 SIM卡 最近联系人 通讯录 获取源代码

    在Android开发中,获取联系人、SIM卡信息以及最近联系人列表是常见的需求。下面将详细解释这些概念和实现方式。 一、Android联系人管理 Android系统提供了ContentProvider接口来访问和操作联系人数据。主要涉及到...

    查看并获取联系人电话

    在Android和iOS等移动操作系统中,查看和获取联系人电话是一项常见的功能,广泛应用于社交应用、通讯工具和其他需要用户授权访问联系人信息的软件中。本文将深入探讨如何在这些平台上实现这一功能。 首先,我们从...

    安卓获取联系人列表

    接下来,你可以通过Content Resolver查询Contacts Contract库中的数据,Contacts Contract是Android提供的API,用于访问和管理联系人信息。 描述中提到的"安卓获取手机联系人demo"是一个具体的实例,可能包含一个...

    Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    首先,要获取手机通讯录的联系人信息,我们需要访问Android的Content Provider,这是一个用于在应用程序之间共享数据的接口。在Android中,`ContactsContract`类提供了对系统通讯录的访问。以下是如何获取手机通讯录...

    获取联系人信息

    在Android系统中,获取联系人信息是常见的功能之一,它涉及到Android系统的Content Provider机制,用于在应用程序之间共享数据。在本教程中,我们将深入探讨如何按照字母顺序获取手机中的联系人信息,就像手机通讯录...

    联系人信息获取添加

    本教程将详细讲解如何在Android应用中获取联系人信息以及如何添加新的联系人。 一、获取联系人信息 在Android中,有两种主要的方式来获取设备上的联系人信息: 1. 使用ContentResolver和ContactsContract类: ...

    添加手机联系人信息到特别关心列表或者常用联系人

    本文将深入探讨如何实现这一功能,包括获取手机联系人信息以及如何将这些信息整合到自定义的特别关心或常用联系人列表。 首先,我们需要获取手机中的联系人数据。Android提供了ContentResolver和ContactsContract类...

    获取手机联系人信息包括头像,手机号等

    综上所述,获取手机联系人信息包括头像和手机号码涉及的主要步骤是:获取读取联系人的权限,使用ContentResolver和ContactsContract查询联系人信息,通过ContentResolver获取联系人头像,最后使用RecyclerView和...

    Android通讯录管理(获取联系人、通话记录、短信消息)

    这篇教程将深入探讨如何在Android应用中获取联系人信息、通话记录以及短信消息。首先,我们来了解一下基本概念。 1. **获取联系人信息**: Android提供了一套完整的API来访问和操作联系人数据。主要涉及`...

    android获取联系人生日信息

    在获取联系人信息之前,你需要获取到ContentResolver实例,它是与ContentProvider进行交互的接口。通常在Activity或Fragment中,你可以通过调用`getContentResolver()`方法获得。 ```java ContentResolver ...

    Android 获取通讯录联系人信息源码

    在Android平台上,获取通讯录联系人信息是常见的需求,尤其对于开发涉及社交功能的应用来说更是必不可少。本示例源码提供了实现这一功能的方法,帮助开发者深入理解如何在Android应用中读取并操作用户通讯录数据。 ...

Global site tag (gtag.js) - Google Analytics