Android获取手机通讯录的信息(姓名和改姓名下的所有手机号)

Android获取手机通讯录的信息(姓名和改姓名下的所有手机号

1.实现过程

1 定义一个专门存储信息的对象类,有姓名,首字母和手机号列表
2 通过获取手机的读写权限,然后来获取手机通讯录信息

2.实现代码

1.对象存储类

import java.util.List;

public class ContactsBean {
    private String fullName;
    private List<String> phoneList;
    private String namePrefix;

    public String getNamePrefix() {
        return namePrefix;
    }

    public void setNamePrefix(String namePrefix) {
        this.namePrefix = namePrefix;
    }


    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public List<String> getPhoneList() {
        return phoneList;
    }

    public void setPhoneList(List<String> phoneList) {
        this.phoneList = phoneList;
    }
}

2.获取手机通讯录对象信息实现类

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;

import com.hjq.permissions.OnPermission;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class ContactUtils {

    //(实际上就是“sort_key”字段) 出来是首字母
    private static final String PHONE_BOOK_LABEL = "phonebook_label";
    //需要查询的字段
    private static final String[] CONTACTOR_ION = new String[]{
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER,

    };
    private static List<ContactsBean> number = new ArrayList<>();
    public static List<ContactsBean> getAllContacts(Activity context) {
        if (XXPermissions.isHasPermission(context, Permission.READ_CONTACTS,Permission.WRITE_CONTACTS)) {
            number = getNumber(context);
        }else {
            XXPermissions.with(context)
                    .constantRequest() //可设置被拒绝后继续申请,直到用户授权或者永久拒绝
                    .permission(Permission.READ_CONTACTS,Permission.WRITE_CONTACTS) //不指定权限则自动获取清单中的危险权限
                    .request(new OnPermission() {

                        @Override
                        public void hasPermission(List<String> granted, boolean isAll) {
                            number = getNumber(context);
                        }
                        @Override
                        public void noPermission(List<String> denied, boolean quick) {

                        }
                    });
        }
        return number;
    }
    @NotNull
    private static List<ContactsBean> getNumber(Context context) {
        List<ContactsBean> contacts = new ArrayList<>();
        String sortOrder =  ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY;
        Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                List<String> allNumber =new ArrayList<>();
                ContactsBean info = new ContactsBean();
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String firstChar = cursor.getString(cursor.getColumnIndex(PHONE_BOOK_LABEL));
                int numberCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                if (numberCount > 0) {
                    Cursor phoneNumberCursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{id}, null);
                    while (phoneNumberCursor.moveToNext()) {
                        String phoneNumber = phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        if (!allNumber.contains(phoneNumber)) {
                            allNumber.add(phoneNumber);
                            info.setPhoneList(allNumber);
                        }
                    }
                    if (phoneNumberCursor != null) {
                        phoneNumberCursor.close();
                    }
                }
                info.setFullName(name);//添加名字
                info.setNamePrefix(firstChar.toLowerCase());//首字母
                info.setPhoneList(allNumber);//所有号码
                contacts.add(info);
            }
            cursor.close();
        }
        return contacts;
    }
}

3.主函数方法调用即可

List<ContactsBean> list=ContactUtils.getAllContacts(getActivity());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值