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 };
  // 联系人的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<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);
        // 得到联系人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<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();
  }
}
目录
相关文章
|
4月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
3501 2
|
5天前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
29 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
1天前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
11 2
|
2月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
2月前
|
Android开发
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
|
3月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
2月前
|
Java Android开发 UED
安卓scheme_url调端:如果手机上多个app都注册了 http或者https 的 intent。 调端的时候,调起哪个app呢?
当多个Android应用注册了相同的URL Scheme(如http或https)时,系统会在尝试打开这类链接时展示一个选择对话框,让用户挑选偏好应用。若用户选择“始终”使用某个应用,则后续相同链接将直接由该应用处理,无需再次选择。本文以App A与App B为例,展示了如何在`AndroidManifest.xml`中配置对http与https的支持,并提供了从其他应用发起调用的示例代码。此外,还讨论了如何在系统设置中管理这些默认应用选择,以及建议开发者为避免冲突应注册更独特的Scheme。
|
5月前
|
缓存 Android开发 开发者
安卓系统优化:提升手机性能的秘诀
【5月更文挑战第31天】本文将探讨如何通过一系列简单的步骤和技巧,对安卓系统进行优化,以提升手机的性能。我们将从清理无用文件、管理后台应用、调整系统设置等方面入手,帮助你的安卓设备运行更加流畅。
|
5月前
|
Android开发
【苹果安卓通用】xlsx 和 vCard 文件转换器,txt转vCard文件格式,CSV转 vCard格式,如何批量号码导入手机通讯录,一篇文章说全
本文介绍了如何快速将批量号码导入手机通讯录,适用于企业客户管理、营销团队、活动组织、团队协作和新员工入职等场景。步骤包括:1) 下载软件,提供腾讯云盘和百度网盘链接;2) 打开软件,复制粘贴号码并进行加载预览和制作文件;3) 将制作好的文件通过QQ或微信发送至手机,然后按苹果、安卓或鸿蒙系统的指示导入。整个过程简便快捷,可在1分钟内完成。
133 6
|
5月前
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
265 0
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理