Android 获取手机的通讯录

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);"></span>

有两种做法效果图如下:                         

   (1)         (2)           

首先加入权限:

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

第一种

(1.1)布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20dp">
    
   <ImageView
          android:id="@+id/image"    
          android:layout_width="40dp" 
          android:layout_height="40dp" 
          android:src="@drawable/ic_launcher"/>    
    <TextView 
        android:id="@+id/name"    
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"    
        android:layout_toRightOf="@+id/image"    
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:singleLine="true" 
        android:text="hello"    
        android:ellipsize="marquee"     
        android:textSize="20dp"  />    
    <TextView 
        android:id="@+id/moble"    
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"    
        android:layout_toRightOf="@+id/image"    
        android:layout_below="@+id/name"    
        android:layout_alignParentRight="true"  
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="10dp"
        android:singleLine="true"    
        android:ellipsize="marquee"   
        android:text="hello"  
        android:textSize="15dp" /> 
</RelativeLayout>

(1.2)Activity.java

package com.zhnag.adresslist;

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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class PhoneAdressActivity extends ListActivity {

	Context mContext = null;

	/** 获取库Phone表字段 **/
	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 = 0;

	/** 电话号码 **/
	private static final int PHONES_NUMBER = 1;

	/** 头像ID **/
	private static final int PHONES_PHOTO_ID = 2;

	/** 联系人的ID **/
	private static final int PHONES_CONTACT_ID = 3;

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

	/** 联系人头像 **/
	private ArrayList<String> mContactsNumber = new ArrayList<String>();

	/** 联系人头像 **/
	private ArrayList<Bitmap> mContactsImg = new ArrayList<Bitmap>();

	ListView mListView = null;
	private MyListAdapter mAdapter;

	private RelativeLayout rely;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mContext = this;
		mListView = this.getListView();
		/** 得到手机通讯录联系人信息 **/
		getPhoneContacts();

		mAdapter = new MyListAdapter(this);
		setListAdapter(mAdapter);

		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);
			}
		});

	}

	// 获取手机联系人
	private void getPhoneContacts() {
		// rely=(RelativeLayout) findViewById(R.id.relationId);
		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);
				// 当手机号码为空的或者为空字段 跳过当前循环
				if (TextUtils.isEmpty(phoneNumber))
					continue;

				// 得到联系人名称
				String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME);

				// 得到联系人ID
				Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID);

				// 得到联系人头像ID
				Long imgid = phoneCursor.getLong(PHONES_PHOTO_ID);

				// 得到联系人头像Bitamp
				Bitmap bitmap = null;

				// photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
				if (imgid > 0) {
					Uri uri = ContentUris.withAppendedId(
							ContactsContract.Contacts.CONTENT_URI, contactid);
					InputStream input = ContactsContract.Contacts
							.openContactPhotoInputStream(resolver, uri);
					bitmap = BitmapFactory.decodeStream(input);
				} else {
					// 设置默认
					bitmap = BitmapFactory.decodeResource(getResources(),
							R.drawable.ic_launcher);
				}

				mContactsName.add(contactName);
				Log.i("info", "contactName---" + contactName);
				// Log.i("info","mContactsName111"+mContactsName);
				mContactsNumber.add(phoneNumber);
				mContactsImg.add(bitmap);
			}

			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);
				// 当手机号码为空的或者为空字段 跳过当前循环
				if (TextUtils.isEmpty(phoneNumber))
					continue;
				// 得到联系人名称
				String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME);

				// 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 iamge = null;
			TextView name = null;
			TextView moble = null;
			if (convertView == null || position < mContactsNumber.size()) {
				convertView = LayoutInflater.from(mContext).inflate(
						R.layout.lianxiren, null);
				iamge = (ImageView) convertView.findViewById(R.id.image);
				name = (TextView) convertView.findViewById(R.id.name);
				moble = (TextView) convertView.findViewById(R.id.moble);
			}
			// 绘制联系人名称
			if (mContactsName.get(position) != null) {
				name.setText(mContactsName.get(position));
			}
			Log.i("info",
					position + "mContactsName------"
							+ mContactsName.get(position));
			// 绘制联系人号码
			moble.setText(mContactsNumber.get(position));
			// Log.i("info","mContactsNumber------"+mContactsNumber.get(position));
			// 绘制联系人头像
			iamge.setImageBitmap(mContactsImg.get(position));
			return convertView;
		}

	}
}

第二种

(2.1)布局文件

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"
    tools:context=".MainActivity" >


    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="20dp"
        android:text="获取手机联系人" />
    <ListView 
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn"/>


</RelativeLayout>
list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
   >
   <ImageView
          android:id="@+id/image"    
          android:layout_width="50dp"
          android:layout_height="50dp"
          />    
    <TextView 
        android:id="@+id/name"    
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"    
        android:layout_toRightOf="@+id/image"    
        android:layout_alignParentRight="true"
        android:singleLine="true" 
        android:layout_marginLeft="20dp"
        android:text="hello"    
        android:textSize="20dp"  />    
    <TextView 
        android:id="@+id/moble"    
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"    
        android:layout_toRightOf="@+id/image"    
        android:layout_below="@+id/name"    
        android:layout_alignParentRight="true"  
        android:layout_marginLeft="20dp"   
        android:text="hello"  
        android:textSize="15dp" /> 
</RelativeLayout>

  (2.2)实体类ContactVo.java

package com.zhang.cantacts;

import android.graphics.Bitmap;

public class ContactVo {

	private long id;
	private String name;
	private String moble;
	private Bitmap img;

	public ContactVo() {
		super();
	}

	public ContactVo(long id, String name, String moble, Bitmap img) {
		super();
		this.id = id;
		this.name = name;
		this.moble = moble;
		this.img = img;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getMoble() {
		return moble;
	}

	public void setMoble(String moble) {
		this.moble = moble;
	}

	public Bitmap getImg() {
		return img;
	}

	public void setImg(Bitmap img) {
		this.img = img;
	}

	@Override
	public String toString() {
		return "ContactVo [id=" + id + ", name=" + name + ", moble=" + moble
				+ ", img=" + img + "]";
	}


}


(2.3)MyAdapter.java

package com.zhang.cantacts;

import java.io.InputStream;
import java.util.List;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {

	private Context mContext;
	private List<ContactVo> mData;

	public MyAdapter(Context mContext, List<ContactVo> mData) {
		super();
		this.mContext = mContext;
		this.mData = mData;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mData.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return mData.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return mData.get(position).getId();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder mHolder = null;
		if (convertView == null) {
			convertView = LayoutInflater.from(mContext).inflate(
					R.layout.contart, null);
			mHolder = new ViewHolder();
			mHolder.name = (TextView) convertView.findViewById(R.id.name);
			mHolder.moble = (TextView) convertView.findViewById(R.id.moble);
			mHolder.imgV = (ImageView) convertView.findViewById(R.id.image);

			convertView.setTag(mHolder);

		} else {
			mHolder = (ViewHolder) convertView.getTag();
			mHolder.imgV.setImageResource(R.drawable.ic_launcher);
		}

		ContactVo cv = mData.get(position);
		mHolder.name.setText(cv.getName());
//		Log.i("info", "22222222" + cv.getName());
		mHolder.moble.setText(cv.getMoble());
		mHolder.imgV.setImageBitmap(cv.getImg());

		return convertView;
	}

	class ViewHolder {
		TextView name, moble;
		ImageView imgV;
	}

}


(2.4)MainActivity.java

package com.zhang.cantacts;

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

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.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

	/** 获取库Phone表字段 **/
	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 = 0;

	/** 电话号码 **/
	private static final int PHONES_NUMBER = 1;

	/** 头像ID **/
	private static final int PHONES_PHOTO_ID = 2;

	/** 联系人的ID **/
	private static final int PHONES_CONTACT_ID = 3;

	private MyAdapter mAdapter;
	private ListView listview;
	private Button btn;
	private List<ContactVo>lists=new ArrayList<ContactVo>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview=(ListView) findViewById(R.id.listview);
		btn=(Button) findViewById(R.id.btn);
		
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				getPhoneContacts();
			}
		});
		
		
		
	}

	private void getPhoneContacts() {
		// rely=(RelativeLayout) findViewById(R.id.relationId);
		ContentResolver resolver = getContentResolver();
		List<ContactVo>list=new ArrayList<ContactVo>();
		// 获取手机联系人
		Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
				PHONES_PROJECTION, null, null, null);

		// 不为空
		if (phoneCursor != null) {
			while (phoneCursor.moveToNext()) {
				ContactVo cv=new ContactVo();
				// 得到手机号码
				String phoneNumber = phoneCursor.getString(PHONES_NUMBER);
				// 当手机号码为空的或者为空字段 跳过当前循环
				if (TextUtils.isEmpty(phoneNumber))
					continue;

				// 得到联系人名称
				String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME);

				// 得到联系人ID
				Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID);
				// 得到联系人头像ID
				Long imgid = phoneCursor.getLong(PHONES_PHOTO_ID);

				// 得到联系人头像Bitamp
				Bitmap contactPhoto = null;

				// photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
				if (imgid > 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);
				}
				
				cv.setName(contactName);
				//Log.i("info", "1111111"+contactName);
				cv.setMoble(phoneNumber);
				cv.setImg(contactPhoto);
				//Log.i("info", "img----"+contactPhoto);
				list.add(cv);
			}
			 phoneCursor.close();
			 lists.clear();
             lists.addAll(list);
            // Log.i("info", "lists----"+lists);
		}
		mAdapter=new MyAdapter(this, lists);
		listview.setAdapter(mAdapter);
	}

}

参考:http://blog.youkuaiyun.com/snwrking/article/details/7601794

源码下载:http://download.youkuaiyun.com/detail/zhang106209/9532858

如果有问题,回复我。




评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值