通过ContactID来查找联系人信息

首先查找全部的RawContact表,得到一个对应的ContactId,通过这个ContactId查找Contact表,获取该联系人的所有信息,删除的联系人信息应该在RawContact表中不会删除, 只是删除了Contact表里面的数据,所以如果在Contact表中找不到ContactId对应的数据,我就可以判断该联系人被删除了.


        Cursor cursor = getContentResolver().query(

        ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);

         while (cursor.moveToNext()) {
            String rawContactId = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.RawContacts._ID));
            Log.i( "RAW_CONTACTS _ID", rawContactId);

             // 得到rawcontact对应的contactId

            String contactId = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
            Log.i( "RAW_CONTACTS CONTACT_ID", contactId);

             // 同步contactId查询contact表,添加一个selector值进行过滤

            Cursor c = getContentResolver().query(
                    ContactsContract.Contacts.CONTENT_URI, null,
                    ContactsContract.Contacts._ID + " =  " + contactId, null,
                    null);
             while (c.moveToNext()) {
                String dn = c
                        .getString(c
                                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                Log.v( "DISPLAY NAME", dn);
            }

            String deleted = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.RawContacts.DELETED));

            Log.i( "RAW_CONTACTS DELETED", deleted);
        }

转载于:https://www.cnblogs.com/kakafra/archive/2012/09/30/2709011.html

在安卓设备上查找本地联系人通常需要利用系统的 `ContactsContract` 内容提供者(Content Provider)。这是一个官方推荐的方式,允许应用安全地查询和修改用户的联系人数据。 ### 具体步骤如下: #### 1. 添加权限 首先,在您的 AndroidManifest.xml 文件中添加读取联系人的权限: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> ``` #### 2. 请求运行时权限 对于 Android 6.0及以上版本,您还需要动态请求权限。例如: ```java if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); } ``` #### 3. 查询联系人信息 一旦获得权限后,就可以开始查询联系人列表了。下面是一个简单的例子展示如何检索所有的名字和电话号码。 ```java String[] projection = { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null); while(cursor.moveToNext()) { long contactId = cursor.getLong(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); // 获取显示名 String name = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.DISPLAY_NAME)); if(Integer.parseInt(cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){ Cursor pCur = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{Long.toString(contactId)}, null); while(pCur.moveToNext()){ String phoneNo = pCur.getString(pCur.getColumnIndexOrThrow( ContactsContract.CommonDataKinds.Phone.NUMBER )); Log.i("Contact", "Name: "+name+", Phone No: "+phoneNo ); } pCur.close(); } } cursor.close(); ``` 以上代码片段展示了基本的流程:先打开光标遍历每个联系项,并进一步检查是否有手机号码可用然后提取它们。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值