android 获取通讯录并显示listview

网上找的demo

每一段都有详细注释

关键代码如下;

权限:

    <!-- 读取联系人权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <!-- 拨打电话权限 -->
    <uses-permission android:name="android.permission.CALL_PHONE" />

代码:

package com.yqy.yqy_testtxl;

import java.io.InputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
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.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		getPhoneContacts();
		Log.e("YQY", mContacts.size() + "-------------mContacts---------");

		initList();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	/** 联系人名称 **/
	private ArrayList<ContactEntity> mContacts = new ArrayList<ContactEntity>();

	private static final String[] PHONES_PROJECTION = new String[] {
			Phone.DISPLAY_NAME, Phone.NUMBER, Phone.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 void getPhoneContacts() {
		ContentResolver resolver = getContentResolver();
		try {
			// 获取手机联系人
			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.ic_launcher);
					}
					ContactEntity mContact = new ContactEntity(contactName,
							phoneNumber, contactPhoto);
					mContacts.add(mContact);
				}
				phoneCursor.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void initList() {
		ListView lv = (ListView) findViewById(R.id.listView1);
		lv.setAdapter(new MyAdapter());
	}

	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			if (mContacts != null && mContacts.size() > 0) {
				return mContacts.size();
			} else {
				return 0;
			}
		}

		@Override
		public Object getItem(int position) {
			if (mContacts != null && mContacts.size() > 0) {
				return mContacts.get(position);
			} else {
				return null;
			}
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = LayoutInflater.from(MainActivity.this).inflate(
						R.layout.item_contact, null);
				holder.name = (TextView) convertView.findViewById(R.id.tv_name);
				holder.number = (TextView) convertView
						.findViewById(R.id.tv_number);
				holder.photo = (ImageView) convertView
						.findViewById(R.id.iv_photo);
				convertView.setTag(holder);
			}else{
				holder = (ViewHolder) convertView.getTag();
			}
			ContactEntity contact = mContacts.get(position);
			holder.name.setText(contact.getName()+"");
			holder.number.setText(contact.getNumber()+"");
			holder.photo.setImageBitmap(contact.getPhoto());
			return convertView;
		}

		class ViewHolder {
			TextView name;
			TextView number;
			ImageView photo;
		}

	}

}

联系人实体类ContactEntity:

package com.yqy.yqy_testtxl;

import android.graphics.Bitmap;
/**
 * 联系人信息
 * @author YQY
 *
 */
public class ContactEntity {
	/** 联系人名称 **/
	private String name;
	/** 联系人号码 **/
	private String number;
	/** 联系人头像 **/
	private Bitmap photo;

	@Override
	public String toString() {
		return "ContactEntity [name=" + name + ", number=" + number
				+ ", photo=" + photo + "]";
	}

	public ContactEntity(String name, String number, Bitmap photo) {
		super();
		this.name = name;
		this.number = number;
		this.photo = photo;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public Bitmap getPhoto() {
		return photo;
	}

	public void setPhoto(Bitmap photo) {
		this.photo = photo;
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 05:06:57

android 获取通讯录并显示listview的相关文章

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获取通讯录并上传(包含通讯录加密)

好久没更新文章了,近期在做通讯录上传,把它分享出来,送给需要的朋友. 写了一个通讯录工具类,直接放代码吧,关键位置通过注释来解释. 这个工具类包含通讯录获取,加密,然后上传操作.看不懂的可以留言 import android.database.Cursor; import android.os.AsyncTask; import android.provider.ContactsContract; import android.util.Base64; import com.demo.alfar

android 读取手机通讯录并显示listview

脉脉中注册时有一个,我已开启权限: 这个原理: 1.如果通讯录为空,脉脉就不让你往下进行, 2.如果没有开启权限,脉脉就不让你往下进行, 3.如果开启权限且通讯录为空,脉脉就不让你往下进行, 4.如果开启权限且通讯录不为空,脉脉才能让你往下进行. 读取通讯录权限 <!-- 读取联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 拨打电话权限 -

android——获取ImageView上面显示的图片bitmap对象

获取的函数方法为:Bitmap bitmap=imageView.getDrawingCache(); 但是如果只是这样写我们得到的bitmap对象可能为null值,正确的方式为: imageView.setDrawingCacheEnabled(true);Bitmap bitmap=imageView.getDrawingCache();imageView.setDrawingCacheEnabled(false); 只是提醒一下多多注意. 其他android学习经验: http://jin

Android 获取并显示远程图片 Picasso框架的使用(二)

转载请注明出处:明桑Android 在上篇文章中介绍了Picasso的基本用法,这篇文章作为以上的练习: 本文代码github地址:UsePicasso 实现效果:(动图请耐心加载) 需要的知识点 了解Picasso框架的使用:Android 获取并显示远程图片 Picasso框架的使用(一) 知道如何自定义GridView 我们需要编写两个布局文件:activity_gridview.xml activity_main.xml 以及ImageAdapter类.GridImageActivity

根据url路径获取图片并显示到ListView中

项目开发中我们需要从网络获取图片显示到控件中,很多开源框架如Picasso可以实现图片下载和缓存功能.这里介绍的是一种简易的网络图片获取方式并把它显示到ListView中. 本案例实现的效果如下: 项目结构: 根据部分开源代码,我修改并封装了一个网络图片加载的工具类GetImageByUrl,通过调用其中的setImage方法,传入待显示图片的ImageView控件和该图片的url路径这两个参数即可实现获取网络图片的功能. GetImageByUrl.java package com.leo.i

Android从服务端获取json解析显示在客户端上面

Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高; 因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet): 构造的Json数据如下: [{"name":"张三",&

React Native之获取通讯录信息并实现类通讯录列表(ios android)

React Native之获取通讯录信息并实现类通讯录列表(ios android) 一,需求分析 1,获取通讯录信息,筛选出通讯录里有多少好友在使用某个应用. 2,获取通讯录信息,实现类通讯录,可拨打电话 发短信等. 二,技术介绍与配置 2.1 技术介绍 1,react-native-contacts地址:https://www.npmjs.com/package/react-native-contacts 2,下载安装:npm install react-native-contacts --

Android 获取并显示远程图片 Picasso框架的使用(一)

转载请注明出处:明桑Android 在Android开发中,常需要从远程获取图片并显示在客户端,当然我们可以使用原生HttpUrlConnection和AsyncTask等操作来完成,但并不推荐,因为这样不仅需要我们编写大量的代码,还需要处理缓存和下载管理等,最好自己封装成库或者采用第三方库: Picasso:A Powerful Image Downloading and Caching Library for Android 根据名字就知道它是跟什么相关了(Picasso:毕加索)它的基本操