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();}}



更多相关文章

  1. Android(安卓)状态栏, 标题栏, 导航栏,系统栏,应用栏的区别和解释
  2. PhoneGap对比html5写android应用程序【android进化三十八】
  3. Android之父Andy Rubin访谈录
  4. 在android中举例说明用Environment、StatFs以及DecimalFormat来
  5. 移动开发之我见--“Android开发生涯”
  6. Android(安卓)使用ContentObserver监听短信的变化,并发送信息给特
  7. Android常用功能实例----(十一)小功能(获取IMEI|手机号等)
  8. Android(安卓)Studio编译出来的APK无法安装如何解决?
  9. 百度也出手机操作系统

随机推荐

  1. 克隆虚拟机和相互登录
  2. VMware Workstation中CentOS救援模式进入
  3. 聊聊TCP连接耗时的那些事儿
  4. 磁盘开篇:扒开机械硬盘坚硬的外衣!
  5. CentOS 7 单用户模式修改密码
  6. 带你深入理解内存对齐最底层原理
  7. 磁盘分区也是隐含了技术技巧的
  8. CentOS7配置IP和远程连接
  9. 我们怎么解决机械硬盘既慢又容易坏的问题
  10. 从DDR到DDR4,内存核心频率其实基本上就没