Android 读取联系人

先扔俩权限试试水

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

javabean

public class Contact {

    private String id;
    private String name;
    private String email;
    private String phone;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Contact{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}
读取联系人的工具类

public class ReadContactUtils {

    private static final String TAG = "jojo";

    public static List<Contact> readContact(Context context) {
        //0 创建集合对象
        List<Contact> contactsLists = new ArrayList<>();
        //1 由于联系人的数据库也是通过内容提供者暴露出来了,所以我想直接使用内容解析者操作数据库

        //2 先查询raw_contacts表 contact_id列
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        Cursor cursor = context.getContentResolver().query(uri, new String[] {"contact_id"}, null, null, null);
        while (cursor.moveToNext()) {
            String contact_id = cursor.getString(0);
            if (contact_id != null) {
                Log.d(TAG, "contact_id" + contact_id);
                // 创建javabean对象
                Contact contact = new Contact();
                contact.setId(contact_id);
                //3 根据rew_contact_id去查询data表,data1列和mimetype_id列
                //小细节 查询的不是data表,而是view_data的视图
                Cursor dataCursor = context.getContentResolver().query(dataUri, new String[] {"data1", "mimetype"}, "raw_contact_id = ?", new String[] {contact_id}, null);

                while (dataCursor.moveToNext()) {
                    String data1 = dataCursor.getString(0);
                    String mimetype = dataCursor.getString(1);

                    if ("vnd.android.cursor.item/name".equals(mimetype)) {
                        Log.d(TAG, "姓名:" + data1);
                        contact.setName(data1);
                    } else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
                        Log.d(TAG, "电话号码:" + data1);
                        contact.setPhone(data1);
                    } else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
                        Log.d(TAG, "邮箱:" + data1);
                        contact.setEmail(data1);
                    }
                }
                // 把javabean对象加入到结合中
                contactsLists.add(contact);
            }
        }
        return contactsLists;
    }
}
主函数类

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "jojo";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Contact> readContacts = ReadContactUtils.readContact(getApplicationContext());

        for (Contact contact : readContacts) {
            Log.d(TAG, "onCreate: contact:" + contact);
        }
    }
}
直接打开会报错,去手机设置里把APP权限开了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值