Android使用READ_CONTACTS读取手机联系人

实例代码:

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" />
时间: 2025-01-31 08:43:15

Android使用READ_CONTACTS读取手机联系人的相关文章

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

手势识别=读取手机联系人=ContentResolver-Day3

手势识别=读取手机联系人=ContentResolverDay32 mobile3.0 手机设置向导页面完成 选择器没有做完成 样式提取完成 自定义控件的优化继续 抽取父类Activity 完成 手机读取联系人. 问题堆栈 自定义控件深入理解自定义ListView 是时候研究框架和设计XUtils4个模块 明天仔细研究窗口过度动画. 4. 手势控制GestureDetector 手势在Activity里面有一个onTouchEvent(MotionEvent event)方法,参数就是用户在屏幕

分页读取手机联系人

<span style="font-size:18px;">/** * 手机联系人个数 */ public static int linkManCount = -1; /** * 每页显示联系人个数 */ public static int pageCount = 20;</span> <span style="font-size:18px;">/** * 获取手机联系人,并返回 * * @param mContext * 上下文

【android基础】读取系统联系人信息和添加一条联系人信息到通讯录

一,读取系统联系人信息 I,准备工作 同样,要读取系统联系人的数据库文件,首先要确定主机名和匹配规则. 我们将联系人的数据库文件导出来查看时,有下面几点需要知道: 1)联系人的数据,比如name,number,email都存储在data表的data1列. 2)区分不同联系人的列为raw_contact_id,它对应于raw_contacts表中的contact_id列 3)区分联系人数据类型的列位于mimetype列,其中1表示emial,5表示电话,7表示姓名. II,思路 读取联系人的信息,

旺仔:Content Provider读取手机联系人

//联系人信息 public void bt5_OnClick(View v) { //得到调用者 ContentResolver contentResolver=getContentResolver(); //准备URI // ContactsContract.Contacts.CONTENT_URI; //调用提供者 Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, n

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

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

《Android开发卷——手机联系人T9搜索》

    自己研究了好几天联系人的T9搜索算法, 先分享出来给大家看看. 欢迎指教.如果有大神有更好的T9搜索算法, 那更好啊,大家一起研究研究,谢谢. 第一部分是比较简单的获取手机联系人. 获取联系人前提要有权限. <uses-permission android:name="android.permission.READ_CONTACTS" /> 因为手机的联系人都存储在数据库里面,所以我们只要把数据库里的信息查询出来即可. private static final St

怎么用getContentResolver().query读取手机短信

============问题描述============ 用这个能读取手机联系人并显示在一个list中,所有短信也是保存在手机里的一个数据库,同理能不能用这个方法读取并显示短信呢?求解 ============解决方案1============ 可以的,uri改为 "content://sms/"就是.

android 安卓APP获取手机设备信息和手机号码的代码示例

下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), 并需要在工程的AndroidManifest.xml文件中,添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 图例: 第二步:新建一个工具类