Android中 获取手机通讯录和手机机主手机号码

2024-02-23 00:48

本文主要是介绍Android中 获取手机通讯录和手机机主手机号码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


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<ContactInfo> getContactsList(Context context) {ContentResolver resolver = context.getContentResolver();Cursor phoneCursor = resolver.query(Phone.CONTENT_URI, phoneContact,null, null, ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC");// <name,ContactInfo>HashMap<String, ContactInfo> nameMap = new HashMap<String, ContactInfo>();// 通讯录的所有手机号码ArrayList<String> phoneList = new ArrayList<String>();if (phoneCursor != null) {//通讯录所有联系人信息ArrayList<ContactInfo> contacts = new ArrayList<ContactInfo>();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<String> mobilePhoneList; // 手机号码public ContactInfo() {CheckNullPointer();}/*** 避免发生空指针异常*/public void CheckNullPointer() {if (mobilePhoneList == null)mobilePhoneList = new ArrayList<String>();if (name == null)name = "";}public String getName() {return name;}public void setName(String name) {this.name = name;}public ArrayList<String> getPhoneNumList() {return mobilePhoneList;}public void setPhoneNumList(ArrayList<String> 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中 获取手机通讯录和手机机主手机号码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737039

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)