读取手机通讯录的方法

在Android 10及以上版本中,由于对用户隐私的保护,应用需要获取用户授权才能访问通讯录信息。下面将介绍如何在Android应用中使用新的权限模型读取手机通讯录。

1. 获取权限

首先,在AndroidManifest.xml文件中添加以下权限声明:

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

然后,在应用运行时,需要动态请求读取通讯录权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CONTACTS);
}

2. 读取通讯录数据

使用ContentResolver可以获取通讯录数据。以下是一个示例代码,用于读取通讯录中的联系人姓名和电话号码:

// 查询通讯录数据
Cursor cursor = getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER},
        null,
        null,
        null
);

// 遍历结果集
if (cursor != null && cursor.getCount() > 0) {
    while (cursor.moveToNext()) {
        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        // 处理联系人姓名和电话号码
    }
}

3. 显示通讯录数据

最后,可以将读取到的通讯录数据显示在应用界面上,例如使用RecyclerView展示联系人列表。下面是一个简单的代码示例:

// 设置RecyclerView
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ContactAdapter adapter = new ContactAdapter(contactList);
recyclerView.setAdapter(adapter);

总结

通过以上步骤,我们可以在Android应用中实现读取手机通讯录的功能。记得在处理用户数据时要遵守相关隐私政策,确保用户数据安全。希望这篇文章对你有所帮助!