获取手机通讯录是Android最常用的小功能,今天自学到了,记下来,主要是通过系统自带的内容提供者提供的数据,我们使用内容接收者获取相应的数据到cursor中,然后获取对应data表中的字段,相关字段代表什么含义,只能自己去查了。

下面是手机通讯录列表的代码,仅供参考:

package com.andy.phonecontact;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;/*** @author Zhang,Tianyou* @version 2014年11月18日 下午10:00:46*/public class MainActivity extends Activity {private ListView select_contact;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);select_contact = (ListView) findViewById(R.id.select_contact);List<Map<String, String>> data = getContactInfo();select_contact.setAdapter(new SimpleAdapter(MainActivity.this, data,R.layout.contact_item_view, new String[] { "name", "phone" },new int[] { R.id.tv_name, R.id.tv_phone }));}/*** 读取手机里的联系人信息* * @return*/private List<Map<String, String>> getContactInfo() {// 把所有的联系人放到listList<Map<String, String>> list = new ArrayList<Map<String, String>>();// 得到一个内容解析器ContentResolver resolver = getContentResolver();// 获取联系人表对应的内容提供者url raw_contacts表和data表Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");Uri datauri = Uri.parse("content://com.android.contacts/data");Cursor cursor = resolver.query(uri, new String[] { "contact_id" },null, null, null);// 获取contact_id 获取联系人idwhile (cursor.moveToNext()) {String contact_id = cursor.getString(0);if (contact_id != null) {// 具体的某个联系人Map<String, String> map = new HashMap<String, String>();// 如果不为空 查询对应data表的联系人信息Cursor dataCursor = resolver.query(datauri, new String[] {"data1", "mimetype" }, "contact_id=?",new String[] { contact_id }, null);while (dataCursor.moveToNext()) {String data1 = dataCursor.getString(0);String mimetype = dataCursor.getString(1);System.out.println("data1 ==" + data1 + "mimetype == "+ mimetype);if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {System.out.println("电话:" + data1);map.put("phone", data1);} else if ("vnd.android.cursor.item/name".equals(mimetype)) {System.out.println("姓名:" + data1);map.put("name", data1);}}list.add(map);// 释放游标dataCursor.close();}}cursor.close();return list;}}

2  布局文件 在activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.andy.phonecontact.MainActivity" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@+id/select_contact" /></RelativeLayout>

3 ListView填充布局contact_item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名"android:textColor="#ff0000"android:textSize="22sp" /><TextViewandroid:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableLeft="@android:drawable/ic_menu_call"android:text="5558"android:textColor="#000000"android:textSize="22sp" /></LinearLayout>

4 添加对应的权限:

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

Android开发之获取手机通讯录相关推荐

  1. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  2. android获取ip方法,Android开发准确获取手机IP地址的两种方式

    最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式. 比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G, ...

  3. 【Android开发】 获取手机上的各种apk的包名和类名,实现跳转到其他应用

    应用装在手机上 情况一:使用Android 调试桥 (adb) 使用数据线连接电脑,并打开 USB 调试,找到你的Android-SDK所在 如我的:"D:\Android\Sdk\plat ...

  4. Android开发_获取手机屏幕的尺寸

    1.设备不存在虚拟键: 第一种获取方法: public static void getScreenWidthAndHeight(Context context) {Display display = ...

  5. Android开发之获取手机运行时间

    前言 昨天我碰到一个问题,需要判断两次的时间,我当时的第一反应是用System.currentTimeMillis()来判断,最后发现这样会有一个BUG,那就是用户如果手动修改时间,那就全乱套了,于是 ...

  6. Android开发之获取通话记录

    上一篇讲的是Android开发之获取手机通讯录,这一篇博客也将针对手机联系人这一块进行开发.下面是获取手机通话记录的详细步骤: 1. 首先,我们需要新建一个类CallLogInfo,用于通话记录的数据 ...

  7. Android Studio中的手机通讯录开发

    Android Studio中的手机通讯录,包含功能(按首字母排序,动态添加) 第一次写博客,也刚踏入工作,想着把自己在项目中遇到的问题,以及自己在工作中所做的项目记录下来,方便以后自己查找知识,一开 ...

  8. android 通过手机号码查询联系人,android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  9. android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  10. android获取手机通讯录和sim卡通讯录

    获取手机通讯录 1 权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> 注意6. ...

最新文章

  1. R语言可视化图像中最常用的点样式(pch、plot characters)列表、ggpubr::show_point_shapes可视化最常用的点样式(pch)
  2. c#退出窗口跳转_关于winform如何如在关闭一个窗口时打开另外一个窗口
  3. it 脑裂_脑裂是什么?Zookeeper是如何解决的?
  4. python计算能够包含两个圆的最小圆
  5. 方案接口服务器问题记录
  6. PyTorch中的nn.Conv1d与nn.Conv2d
  7. ubuntu16.04 配置nginx支持redis
  8. 数位dp模板 最高位最低位_无纸化办公入门指南(数位板篇)
  9. 循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN
  10. linux14.04 Apache,Ubuntu 14.04编译安装Apache
  11. Hi3559AV100开发环境搭建
  12. Java class文件反编译工具推荐以及Eclipse中查看/调试Jar包中的代码
  13. IDC机房建设的关键技术有哪些?
  14. win7自定义html为桌面,Win7系统如何自定义个性桌面?
  15. POJ 3253.Fence Repair
  16. 关于高通8953开机需要按pwrkey很长时间的问题
  17. Win10下执行mklink提示你没有足够权限执行此操作
  18. 港科夜闻|香港科大彭倩教授分析疫情下企业如何减低投资损失
  19. 面试题:重写equals方法为什么通常会重写hashcode方法?
  20. 史上最详细的Pytorch版yolov3代码中文注释详解(四)

热门文章

  1. Evolved Transformer
  2. python实现连接池技术
  3. 面试题:100个白球,100个黑球,每次取两个
  4. ubuntu 备份mysql数据库_Ubuntu Server下MySql数据库备份脚本代码
  5. Java:关于负数的向上转型
  6. 关于拉格朗日对偶问题中对偶性的理解 (很有趣)
  7. 玩转基金(1)基金基础
  8. 最新用python来操作mysql完全解析
  9. 从防御到应急响应 XDR
  10. SpringBoot+Quartz实现动态可配定时任务(动态定时任务)