android获取机主手机号,Android中 获取手机通讯录和手机机主手机号码——诺诺"涂鸦"记忆...

目标:获取手机通讯录联系人的姓名和手机号码,屏幕座机和其他非手机号码,避免号码重复

(注:我只给出了代码思路和用法示例,大家可以自己调用方法debug运行看结果或者自行编写显示结果的代码,根据需要进行修改,希望对您有帮助!)

eg:

/**

* 获取手机通讯录

* 只获取正确非重复手机号码

* @author 诺诺

*

*/

public class ContactUtils {

private static final String TAG = "ContactList";

// 获取系统数据库联系人Phone表字段信息

private static final String[] phoneContact = new String[] {

Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID };

// 联系人的ID

private static final int contactID_Contact = 0;

// 联系人名称

private static final int name_Contact = 1;

// 电话号码

private static final int num_Contact = 2;

// 头像ID

private static final int phoneID_Contact = 3;

/**

* 获取手机联系人信息:只获取正确非重复手机号

* @param context

* @return ArrayList

*/

public static ArrayList getContactsList(Context context) {

ContentResolver resolver = context.getContentResolver();

Cursor phoneCursor = resolver.query(Phone.CONTENT_URI, phoneContact,

null, null, ContactsContract.Contacts.DISPLAY_NAME

+ " COLLATE LOCALIZED ASC");

//

HashMap nameMap = new HashMap();

// 通讯录的所有手机号码

ArrayList phoneList = new ArrayList();

if (phoneCursor != null) {

//通讯录所有联系人信息

ArrayList contacts = new ArrayList();

ContactInfo contactInfo = null;

while (phoneCursor.moveToNext()) {

// 得到手机号码

String phoneNumber = phoneCursor.getString(num_Contact);

Log.i(TAG + " phoneNumber: ", phoneNumber);

// 当手机号码为空的或非正确手机号 跳过此次循环

if (TextUtils.isEmpty(phoneNumber)

|| !RegexUtils.isMoblieNo(phoneNumber)){

continue;

}

// 得到联系人名称

String contactName = phoneCursor.getString(name_Contact);

// 得到联系人ID

int contactid = phoneCursor.getInt(contactID_Contact);

// 得到联系人头像ID

Long photoid = phoneCursor.getLong(phoneID_Contact);

if (phoneList.contains(phoneNumber)) {

continue;

} else {

phoneList.add(phoneNumber);

if (!nameMap.containsKey(contactName)) {

contactInfo = new ContactInfo();

contactInfo.name = contactName;

contactInfo.mobilePhoneList.add(phoneNumber);

contacts.add(contactInfo);

nameMap.put(contactName, contactInfo);

} else {

contactInfo = nameMap.get(contactName);

contactInfo.mobilePhoneList.add(phoneNumber);

}

}

}

phoneCursor.close();

return contacts;

}

return null;

}

/**

* 联系人信息类

*/

public static class ContactInfo implements Serializable {

public String name; // 联系人姓名

public ArrayList mobilePhoneList; // 手机号码

public ContactInfo() {

CheckNullPointer();

}

/**

* 避免发生空指针异常

*/

public void CheckNullPointer() {

if (mobilePhoneList == null)

mobilePhoneList = new ArrayList();

if (name == null)

name = "";

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public ArrayList getPhoneNumList() {

return mobilePhoneList;

}

public void setPhoneNumList(ArrayList mobilePhone) {

mobilePhoneList = mobilePhone;

}

}

}

public class RegexUtils {

/**

* 验证是否是有效手机号

*

* 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188

*

*   联通:130、131、132、152、155、156、185、186

*

*   电信:133、153、180、189、(1349卫通)

*

* @param mobiles

* @return

*/

public static boolean isMoblieNo(String mobiles) {

Pattern p = Pattern

.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");

Matcher m = p.matcher(mobiles);

return m.matches();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值