Android获取通讯录

在Android开发中,获取手机通讯录是一个常见的需求。通过获取通讯录,我们可以实现很多功能,比如展示联系人列表、搜索联系人、拨打电话等。本文将介绍如何在Android应用中获取通讯录,并展示一个简单的示例代码。

获取通讯录权限

首先,我们需要在AndroidManifest.xml文件中添加获取通讯录权限的声明:

<uses-permission android:name="android.permission.READ_CONTACTS" />

这样我们的应用就可以获取到手机通讯录的读取权限。

获取通讯录数据

在Android中,我们可以通过ContentResolver来获取通讯录数据。下面是一个简单的示例代码,用于获取通讯录中的联系人姓名和电话号码:

ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

if (cursor != null && cursor.getCount() > 0) {
    while (cursor.moveToNext()) {
        String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

        Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{contactId}, null);

        if (phoneCursor != null && phoneCursor.moveToNext()) {
            String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            Log.d("Contact", "Name: " + contactName + ", Phone: " + phoneNumber);
        }

        if (phoneCursor != null) {
            phoneCursor.close();
        }
    }

    cursor.close();
}

上面的代码中,我们首先通过ContentResolver查询通讯录中的联系人,然后遍历联系人列表,获取联系人姓名和电话号码。

示例代码

以下是一个简单的获取通讯录数据的示例代码:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

                Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{contactId}, null);

                if (phoneCursor != null && phoneCursor.moveToNext()) {
                    String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    Log.d("Contact", "Name: " + contactName + ", Phone: " + phoneNumber);
                }

                if (phoneCursor != null) {
                    phoneCursor.close();
                }
            }

            cursor.close();
        }
    }
}

旅行图

journey
    title Android获取通讯录
    section 获取通讯录权限
    section 获取通讯录数据
    section 示例代码

甘特图

gantt
    title Android获取通讯录示例代码时间表
    section 申请权限
        :编写AndroidManifest.xml;
        :添加权限声明;
    section 获取通讯录数据
        :通过ContentResolver查询通讯录数据;
        :遍历联系人列表获取联系人姓名和电话号码;
    section 示例代码
        :编写MainActivity.java;
        :展示联系人姓名和电话号码;

通过上面的示例代码和说明,我们可以在Android应用中获取到通讯录数据,并实现相应的功能。如果您有任何问题或疑问,请随时留言交流。希望本文对您有所帮助!