实例代码:

package com.example.readcontacts;import java.io.InputStream;
import java.util.ArrayList;import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends ListActivity {Context mContext = null;/** 获取库Phon表字段 **/
private static final String[] PHONES_PROJECTION = new String[] {
Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID, Phone.CONTACT_ID };/** 联系人显示名称 **/
private static final int PHONES_DISPLAY_NAME_INDEX = 0;/** 电话号码 **/
private static final int PHONES_NUMBER_INDEX = 1;/** 头像ID **/
private static final int PHONES_PHOTO_ID_INDEX = 2;/** 联系人的ID **/
private static final int PHONES_CONTACT_ID_INDEX = 3;/** 联系人名称 **/
private ArrayList<String> mContactsName = new ArrayList<String>();/** 联系人头像 **/
private ArrayList<String> mContactsNumber = new ArrayList<String>();/** 联系人头像 **/
private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();ListView mListView = null;
MyListAdapter myAdapter = null;@Override
public void onCreate(Bundle savedInstanceState) {
mContext = this;
mListView = this.getListView();
/** 得到手机通讯录联系人信息 **/
getPhoneContacts();myAdapter = new MyListAdapter(this);
setListAdapter(myAdapter);mListView.setOnItemClickListener(new OnItemClickListener() {@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
// 调用系统方法拨打电话
Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri
.parse("tel:" + mContactsNumber.get(position)));
startActivity(dialIntent);
}
});super.onCreate(savedInstanceState);
}/** 得到手机通讯录联系人信息 **/
private void getPhoneContacts() {
ContentResolver resolver = mContext.getContentResolver();// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
PHONES_PROJECTION, null, null, null);if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {// 得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
// 当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;// 得到联系人名称
String contactName = phoneCursor
.getString(PHONES_DISPLAY_NAME_INDEX);// 得到联系人ID
Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);// 得到联系人头像ID
Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);// 得到联系人头像Bitamp
Bitmap contactPhoto = null;// photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
if (photoid > 0) {
Uri uri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, contactid);
InputStream input = ContactsContract.Contacts
.openContactPhotoInputStream(resolver, uri);
contactPhoto = BitmapFactory.decodeStream(input);
} else {
contactPhoto = BitmapFactory.decodeResource(getResources(),
R.drawable.contact_photo);
}mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
mContactsPhonto.add(contactPhoto);
}phoneCursor.close();
}
}/** 得到手机SIM卡联系人人信息 **/
private void getSIMContacts() {
ContentResolver resolver = mContext.getContentResolver();
// 获取Sims卡联系人
Uri uri = Uri.parse("content://icc/adn");
Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,
null);if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {// 得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
// 当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;
// 得到联系人名称
String contactName = phoneCursor
.getString(PHONES_DISPLAY_NAME_INDEX);// Sim卡中没有联系人头像mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
}phoneCursor.close();
}
}class MyListAdapter extends BaseAdapter {
public MyListAdapter(Context context) {
mContext = context;
}public int getCount() {
// 设置绘制数量
return mContactsName.size();
}@Override
public boolean areAllItemsEnabled() {
return false;
}public Object getItem(int position) {
return position;
}public long getItemId(int position) {
return position;
}public View getView(int position, View convertView, ViewGroup parent) {
ImageView image = null;
TextView title = null;
TextView text = null;
if (convertView == null || position < mContactsNumber.size()) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.colorlist, null);
image = (ImageView) convertView.findViewById(R.id.color_image);
title = (TextView) convertView.findViewById(R.id.color_title);
text = (TextView) convertView.findViewById(R.id.color_text);
}
// 绘制联系人名称
title.setText(mContactsName.get(position));
// 绘制联系人号码
text.setText(mContactsNumber.get(position));
// 绘制联系人头像
image.setImageBitmap(mContactsPhonto.get(position));
return convertView;
}}
}

注意:用户权限

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

Android使用READ_CONTACTS读取手机联系人相关推荐

  1. Android程序如何读取手机联系人

    导出手机联系人数据库,找到数据的存储结构 数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表: ...

  2. java 添加手机联系人_Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结...

    本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 ...

  3. Android 保存号码至已有联系人,新建联系人,读取手机联系人

    添加必要的权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> & ...

  4. 读取手机联系人简单方法(id,姓名,手机号)

    <uses-permission android:name="android.permission.READ_CONTACTS"/> 布局文件 <?xml ver ...

  5. 读取手机联系人,并用listview显示

    读取手机联系人,用到的就是一个contentprovider. 数据库里面有三张重要的表 raw_contact 里面有所有联系人的数据 data 每个联系人的所有数据 mime-type 每条数据的 ...

  6. java 获取手机联系人_Android 读取手机联系人、拨号、发送短信及长按菜单的操作...

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  7. Android内容提供者(读取手机联系人信息)

    工程目录: Manifestes加入读取联系人权限 <uses-permission android:name="android.permission.READ_CONTACTS&qu ...

  8. Android项目——读取手机联系人信息

    加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...

  9. Android 批量插入删除手机联系人

    找遍了网上,都没找到批量删除手机联系人好友的方法,有也效率特别低,删除200个人都要几十秒,反而批量添加联系人速度很快 批量插入联系人 public static boolean batchAddCo ...

最新文章

  1. springmvc4 ajax 406,Spring4 MVC 中,jQuery ajax (406 Not Acceptable)
  2. 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?
  3. jboss7 java版本_jboss-as-7.1.1.Final与jdk1.8不兼容解决方案
  4. Linux篇:通配符的应用
  5. python小白从哪来开始-Python爬虫小白入门(一)写在前面
  6. nginx 负载均衡的五中不同配置方式
  7. 【紫书第十一章】图论模型与算法入门
  8. ubuntn安装qt5.12.10
  9. Talib技术因子详解(七)
  10. 与计算机相关的统计表格,统计信息化 Excel与SPSS应用pdf
  11. julia语言 python解释器_新一代科学计算语言Julia以及开发环境搭建教程
  12. 日常记账如何自定义设置收支类别及账户
  13. 找到一个数组对象中 '某某某(属性名)'为 ['某某','某某']的值
  14. 西门子三开接线图解_西门子三位单控开关怎么接线要开关实际图
  15. 采油厂污水选用流量计的类型建议
  16. Java开发手册(黄山版)
  17. Deep Learning × ECG (4) :利用卷积神经网络CNN对心律失常ECG数据进行分类
  18. 路未到尽头,而是该转弯了【转】
  19. ios越狱c语言编译器,Saigon Jailbreak越狱工具 IOS 10.2.1 支持win/mac
  20. iOS 优雅的处理网络数据,你真的会吗?不如看看这篇.

热门文章

  1. pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
  2. 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路
  3. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践
  4. c语言课程设计平时成绩,计算中心
  5. xcode开发php,xcode怎么编写c语言
  6. win10家庭版没有device guard_普通用户选择哪个Win10系统版本?家庭版与专业版的对比介绍...
  7. AD域机器如何指定时钟服务器,active-directory – 如何让我的域控制器与正确的外部时间源同步?...
  8. android 权限自动授权,Android判断是否某个权限是否授权
  9. java解析url字符串,将字符串解析为URL
  10. 《程序员面试金典》最大和子矩阵