Android中 获取手机通讯录和手机机主手机号码
16lz
2021-01-24
Android中 获取手机通讯录和手机机主手机号码
文 | 莫若吻
1.获取手机机主手机号码
目标:获取手机机主手机号码
(注:我只给出了代码思路和用法示例,大家可以自己调用方法debug运行看结果或者自行编写显示结果的代码,根据需要进行修改,希望对您有帮助!)
eg:
public class ContactUtils {private static TelephonyManager telephonyManager;/** * 获取本地SIM卡手机机主号码 * * @return */public static String getNativePhoneNumber(Context cxt) {telephonyManager = (TelephonyManager) cxt.getSystemService(Context.TELEPHONY_SERVICE);String NativePhoneNumber = null;NativePhoneNumber = telephonyManager.getLine1Number();return NativePhoneNumber;}}
2.获取手机通讯录
目标:获取手机通讯录联系人的姓名和手机号码,屏幕座机和其他非手机号码,避免号码重复
(注:我只给出了代码思路和用法示例,大家可以自己调用方法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 };// 联系人的IDprivate static final int contactID_Contact = 0;// 联系人名称private static final int name_Contact = 1;// 电话号码private static final int num_Contact = 2;// 头像IDprivate 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);// 得到联系人IDint contactid = phoneCursor.getInt(contactID_Contact);// 得到联系人头像IDLong 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();}}
更多相关文章
- Android(安卓)状态栏, 标题栏, 导航栏,系统栏,应用栏的区别和解释
- PhoneGap对比html5写android应用程序【android进化三十八】
- Android之父Andy Rubin访谈录
- 在android中举例说明用Environment、StatFs以及DecimalFormat来
- 移动开发之我见--“Android开发生涯”
- Android(安卓)使用ContentObserver监听短信的变化,并发送信息给特
- Android常用功能实例----(十一)小功能(获取IMEI|手机号等)
- Android(安卓)Studio编译出来的APK无法安装如何解决?
- 百度也出手机操作系统