Android获取手机联系人的方法

Android 获取系统联系人信息的实例

一、获取手机联系人姓名及手机号

//跳转到系统联系人应用
Intent intent = new Intent(Intent.ACTION_PICK,
          ContactsContract.Contacts.CONTENT_URI);
      try {
        startActivityForResult(intent, Contacts1RequestCode);
      } catch (Exception e) {
        LogManager.e("打开联系人信息失败");
      }

添加权限申请

<uses-permission android:name="android.permission.READ_CONTACTS" /> 

选择联系人并返回

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (Contacts1RequestCode == requestCode) {// 取联系信息返回
      if (resultCode == RESULT_OK) {
        Uri contactData = data.getData();
        Cursor cursor = getContentResolver().query(contactData, null,
            null, null, null);
        //Key联系人姓名,Value联系人手机号
        Map<String, String> phoneMap = this.getContactPhone(cursor);
        if (!cursor.isClosed()) {
          cursor.close();
        }
        if (null != phoneMap && !phoneMap.isEmpty()) {
          Set<String> keySet = phoneMap.keySet();
          if (null != keySet && !keySet.isEmpty()) {
            Object[] keys = keySet.toArray();
            String phoneName = (String) keys[0];
            String phoneNo = phoneMap.get(phoneName);
          }
        }
      }
    }
  }
/**
   * 获取联系人姓名及手机号
   *
   * @param cursor
   * @return Key为联系人姓名,Value为联系人手机号
   */
  private Map<String, String> getContactPhone(Cursor cursor) {
    Map<String, String> resultMap = new HashMap<String, String>();
    String phoneName = null;// 姓名
    String mobilePhoneNo = null;// 手机号 

    if (null != cursor) {
      cursor.moveToFirst(); 

      // 获得联系人的ID号
      int idFieldIndex = cursor
          .getColumnIndex(ContactsContract.Contacts._ID);
      String contactId = cursor.getString(idFieldIndex);
      // 联系人姓名
      int idphoneNameIndex = cursor
          .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
      phoneName = cursor.getString(idphoneNameIndex); 

      // 获得联系人的电话号码的cursor;
      Cursor allPhones = getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",
          new String[] { contactId }, null); 

      // 所以联系电话(包话电话和手机号)
      List<String> allPhoneNumList = new ArrayList<String>();
      if (allPhones.moveToFirst()) { 

        // 遍历所有的电话号码
        for (; !allPhones.isAfterLast(); allPhones.moveToNext()) {
          int telNoTypeIndex = allPhones
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
          int telNoType = allPhones.getInt(telNoTypeIndex); 

          int telNoIndex = allPhones
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
          String telNo = allPhones.getString(telNoIndex);
          allPhoneNumList.add(telNo); 

          if (2 == telNoType) {// 手机号(原生态的SDK定义:mobile是2,home是1,work是3,other是7)
            mobilePhoneNo = telNo;
            break;
          }
        }
        if (!allPhones.isClosed()) {
          allPhones.close();
        } 

        if (null == mobilePhoneNo) {// 没有存贮手机号
          if (!allPhoneNumList.isEmpty()) {// 存在其它号码
            for (String tel : allPhoneNumList) {
              if (VerifyKit.isLegal(FormatType.MobilePhone, tel)) {// 取属于手机号格式
                mobilePhoneNo = tel;
                break;
              }
            }
          }
        }
      }
      if (!cursor.isClosed()) {
        cursor.close();
      } 

      resultMap.put(phoneName, mobilePhoneNo);
    }
    return resultMap;
  }

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • android利用ContentResolver访问者获取手机联系人信息

    利用ContentResolver内容访问者,获取手机联系人信息我做了两种不同的做法.第一种,直接获取所有手机联系人信息,展示在ListView中.第二种,通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,展示在ListView中,结果如下: 第一种: 第二种: 第一种:直接获取所有手机联系人信息 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission android:name="android.permission.REA

  • android如何获取联系人所有信息

    只要是开发和手机通讯录有关的应用,总要学会获取联系人信息,每次都google很麻烦,怎么办? 写一个工具类,获取到通讯录里所有的信息并分好类,至于大家怎么用就不管了,看下代码就都明白了,虽然代码很多,但是很简单,大部分都已分类,如果有没有写上的,大家可以打开自己手机上通讯录数据库,里面的字段都有标明,用的内容提供者,因此我们只需要拿到那个字段名基本上就能取出数据了. 工具类: package com.example.test; import java.util.ArrayList; import

  • Android编程实现通讯录中联系人的读取,查询,添加功能示例

    本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能.分享给大家供大家参考,具体如下: 先加二个读和写权限: <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 具体代码: package com.ebo

  • Android仿微信联系人列表字母侧滑控件

    仿微信联系人列表字母侧滑控件, 侧滑控件参考了以下博客: Android实现ListView的A-Z字母排序和过滤搜索功能 首先分析一下字母侧滑控件应该如何实现,根据侧滑控件的高度和字母的数量来平均计算每个字母应该占据的高度. 在View的onDraw()方法下绘制每一个字母 protected void onDraw(Canvas canvas) { super.onDraw(canvas); int height = getHeight();// 获取对应高度 int width = get

  • Android实现获取联系人电话号码功能

    本篇文档主要记录一下获取联系人的电话号码的一种方式. 1.选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); mSuspectButton = (Button)v.findViewById(R.id.crime_suspect); mSuspectButton.setOn

  • Android跳转到系统联系人及拨号或短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下:  1)直接拨打 Intent intentPhone = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)); startActivity(intentPhone); 2)跳转到拨号界面 Intent intent = newIntent(Intent.ACTION_DIAL,Uri.pa

  • Android ContentProvider实现获取手机联系人功能

    在之前项目中有用到关于获取手机联系人的部分,闲置就想和大家分享一下,话不多说,上代码: java部分: package com.example.content; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle

  • Android保存联系人到通讯录的方法

    上一篇文章讲了如何获取所有联系人,这篇文章就讲下怎么保存联系人数据到本机通讯录.这里我就假设你已经拿到了要保存的联系人数据. 因为是一个工具类,所以我这里就只给一个方法了,也是很简单,但是写的没有读取联系人的数据那么多,要保存更多其实看下如何读取的就会了. 直接上源码: /** * 添加联系人到本机 * * @param context * @param contact * @return */ public static boolean addContact(Context context,

  • Android获取手机联系人的方法

    Android 获取系统联系人信息的实例 一.获取手机联系人姓名及手机号 //跳转到系统联系人应用 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); try { startActivityForResult(intent, Contacts1RequestCode); } catch (Exception e) { LogManager.e("打开联系人信息失败"

  • Android获取手机联系人列表的方法

    本文实例为大家分享了Android获取手机联系人列表的具体代码,供大家参考,具体内容如下 下面直接贴代码 1.先写一个实体类,来放名字和号码 public class PhoneDto { private String name; //联系人姓名 private String telPhone; //电话号码 public String getName() { return name; } public void setName(String name) { this.name = name;

  • Android 获取手机联系人实例代码详解

    我的风格,废话不多说了,直接给大家贴代码了. 具体代码如下所示: package com.org.demo.demo; import com.org.wangfeng.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Butt

  • Android获取手机联系人信息

    Android如何获取手机联系人信息,本文为大家揭晓. 获取手机联系人信息步骤: 1.获取 ContentResolver ContentResolver resolver = getContentResolver(); 2.resolver.query(*)查询信息 查询手机联系人的URI:ContactsContract.RawContacts.CONTENT_URI 查询手机联系人手机号的URI:ContactsContract.CommonDataKinds.Phone.CONTENT_

  • Android获取手机联系人电话号码并返回结果

    之前做了一个小练习需要用到获取手机里联系人的电话号码,通过查阅相关的资料,自己尝试写了一个小例子,可以成功获取. 首先需要在AndroidManifest.xml中获取权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> xml布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

  • Android实现手机联系人分栏效果

    本文实例为大家分享了Android实现手机联系人分栏效果的具体代码,供大家参考,具体内容如下 小编在项目时期遇见了制作手机联系人分栏效果,查询了很多资料,现在总结如下: 添加的代码并不多,用ListView写好数据以后,只需在Adapter里添加一个方法,并且在getView()方法里添加几行代码即可.不过小编现在介绍的方法,只适合做简单项目,大型项目还没研究该代码是否有缺陷,欢迎各位大神批评指教. 给大家看一下,小编做的代码效果图: adapter具体代码如下: public class Co

  • Android获取手机位置的实现代码

    本文实例为大家分享了Android获取手机位置的方法,供大家参考,具体内容如下 1.项目Src下创建...service包,然后新建GPSService类 package com.zebra.mobilesafe.service; import java.io.IOException; import java.io.InputStream; import android.app.Service; import android.content.Intent; import android.cont

  • Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    android获取手机通讯录联系人信息 复制代码 代码如下: private void getPhoneContacts() {        ContentResolver resolver = this.getContentResolver();                // 获取手机联系人       Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,                  new String[] { Phone

  • Android使用AsyncQueryHandler实现获取手机联系人功能

    利用AsyncQueryHandler能异步任务获取手机联系人,增加用户体验,使用起来也很方便.不多说,上干货. 布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a

  • Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法

    本文实例讲述了Android获取手机屏幕宽高.状态栏高度以及字符串宽高信息的方法.分享给大家供大家参考.具体如下: 首先定义TextView对象commentText 获取文字的宽高: TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); textPaint.setTextSize(commentText.getTextSize()); textPaint.setColor(Color.WHITE); FontMetrics fo

随机推荐