Android获取手机联系人的姓名和电话

Android获取手机联系人的姓名和电话



主要是用到了跳入手机联系人的intent和获取手机联系人信息的内容提供者,直接上代码

注:此贴是借鉴别人的帖子加了一些自己的东西写出的,原帖地址明日附上:

/ 首先 我们需要跳入手机通讯录
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
 startActivityForResult(intent, 0);

// 之后,我们需要重写onActivityResult来解析从联系人返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 0: {

            if (resultCode == Activity.RESULT_OK) {

                Uri contactData = data.getData();
                // 这样就得到了一个装有联系人数据的游标
                Cursor c = managedQuery(contactData, null, null, null, null);
                // 将游标移动到第一个位置,然后我们开始解析游标中的数据,这里我们抽取了一个方法;
                c.moveToFirst();
                // getContactPhone(CUrsor cursor)
                String phoneNum[] = this.getContactPhone(c);
                // 最终 就得到了你想得到的东西,装在了phoneNum[] 中,想做什么操作就做什么操作就行了;
            }

            break;
        }
    }
}
/**
 * 参数: Cursor cursor; 指定游标
 * 功能: 从指定游标中取出联系人姓名和电话,并且返回
 * 返回值: String[] 0位置是联系人姓名 1位置是联系人电话
 */
private String[] getContactPhone(Cursor cursor) {

    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
    int phoneNum = cursor.getInt(phoneColumn);
    // 最终要返回的String数组
    String phoneResult[] = new String[2];
    if (phoneNum > 0) {
        // 获得联系人的ID号
        int idColumn = curso0r.getColumnIndex(ContactsContract.Contacts._ID);
        String contactId = cursor.getString(idColumn);
        // 获得联系人的电话号码的cursor;
        Cursor phones = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
                null, null);
        if (phones.moveToFirst()) {
            // 遍历所有的电话号码
            for (; !phones.isAfterLast(); phones.moveToNext()) {
                int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int phone_type = phones.getInt(typeindex);
                // 得到选定联系人的号码
                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                // 得到选定联系人的名字
                String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));

                // 这一块switch不清楚能过滤什么,明天回公司试试看,
                switch (phone_type) {
                    case 2:
                        phoneResult[1] = phoneNumber;
                        phoneResult[0] = phoneName;
                        break;
                }
            }
            // 最后 要关闭Cursor
            if (!phones.isClosed()) {
                phones.close();
            }
        }
    }
    return phoneResult;
}

复制以上代码,就可以做到了..

时间: 2025-01-11 17:07:56

Android获取手机联系人的姓名和电话的相关文章

[小项目] 获取手机联系人并且向服务器发送JSON数据

[小项目] 获取手机联系人并且向服务器发送JSON数据 好久没有写文档了...最近忙着带班,也没有时间学习新东西,今天刚好有个小Demo,就写了一下,顺便丰富一下我的博客吧! 首先说一下需求: 简单的说,就是一个程序,会获取手机的联系人列表,然后转换成JSON字符串数组,向指定服务器中发送数据...总感觉有侵犯别人隐私权的意味; 注:仅供学习使用,不要做违法的事情哟 这个程序我写的有点有条理,首先有几个工具类: 1. 判断是否联网的工具类(NetUtils) 2. 从手机中获取所有联系人的工具类

浅谈android中手机联系人字母索引表的实现

实际上字母索引表的效果,可以说在现在的众多APP中使用的非常流行,比如支付宝,微信中的联系人,还有购物,买票的APP中选择全国城市,切换城市的时候,这时候的城市也就是按照一个字母索引的顺序来显示,看起来是很方便的.其实这种字母索引表的效果最开始是出现在微信的联系人中.因为觉得这种效果功能在今后的项目中可以说是非常常见,可能会用的上,所以准备来波博客讲述一下实现的原理,一来方便以后自己复习,二来如果能够帮助一些android路上奋斗小伙伴也是蛮有意义的. 下面我们先来看下效果图, 看完效果图后我们

获取手机联系人的信息

使用ContentResolver获取手机联系人的办法,建议使用第二种 1.一般下面的方法查询的是视图的表,表的字段需要查询获取,比较麻烦,可能会经常出错(特别在真机调试的时候) // TODO 这种方法直接指定uri在真机中是获取不到联系人信息的 // [1]获取到内容解析者 // ContentResolver contentResolver = getContentResolver(); /*Cursor cursor = contentResolver.query(Uri .parse(

Android 读取手机联系人、拨号、发送短信及长按菜单的操作

本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要用ListView列表控件展示手机联系人 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/a

【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

为了实现一个功能,需要搜集手机信息,自己先在网上找了相关信息进行了汇总,主要是汇集手机的信息,一般想要的信息在手机设置->关于手机->状态消息里面包含了手机的各种信息,下面的代码中也主要显示了那些信息,但是源码的方法我还没有看,先把总结的贴出来.先上图(太多就截取几个).  上代码啦,太多了,就写主要代码了. // 获取Android手机中SD卡存储信息 获取剩余空间 public void getSDCardInfo() { // 在manifest.xml文件中要添加 /* * <u

Android 获取通讯录联系人

public static Map<String,String> getAllCallRecords(Context context) { Map<String,String> temp = new HashMap<String, String>(); Cursor c = context.getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, Contac

Android获取全部联系人信息的例子

先定义一个显示条目的xml布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_conte

android 获取手机的所有程序和widget的包名和启动类名

获取 widget可以 AppWidgetManager 来获取 List<AppWidgetProviderInfo> widget=AppWidgetManager.getInstance(Context(上下文)).getInstalledProviders(); 得到所有AppWidgetProviderInfo for (int i = 0; i < widget.size(); i++) {        AppWidgetProviderInfo info=widget.g

Android之Build类.(Android获取手机配置信息 )

一.类结构: java.lang.Object    ? android.os.Build 二.类概述:从系统属性中提取设备硬件和版本信息. 三.内部类: 1.Build.VERSION    各种版本字符串 2.Build.VERSION_CODES    目前已知的版本代码的枚举类 四.常量:UNKNOWN   当一个版本属性不知道时所设定的值.其字符串值为 "unknown" . 五.构造方法: Build () 六.静态属性 1.BOARD   主板:The name of t