Android 读取并显示通讯录

1)创建Contact类代码如下

package com.example.androidapp;

import android.graphics.Bitmap;


public class Contact {
	/*姓名*/
	private String contactName;
	
	public void setContactName(String _contactName){
		this.contactName=_contactName;
	}
	
	public String getContactName(){
		return contactName;
	}
	/*电话号码*/
	private String contactNumber;
	
	public void setContactNumber(String _contactNumber){
		this.contactNumber=_contactNumber;
	}
	
	public String getContactNumber(){
		return contactNumber;
	}
	/*图片*/
	private Bitmap contactPhoto;
	
	public void setContactPhoto(Bitmap _contactPhoto){
		this.contactPhoto=_contactPhoto;
	}
	
	public Bitmap getContactPhoto(){
		return contactPhoto;
	}
}

2)创建contactlist.xml作为自定义ListView的样式代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/contactPhoto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/contactName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/contactNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

3)创建MyListAdapter.java作为自定ListAdapeter代码如下

package com.example.androidapp;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

class MyListAdapter extends BaseAdapter {
	private ArrayList<Contact> contacts=null;
	private Context context=null;
	public MyListAdapter(ArrayList<Contact> _contacts,Context _context)
	{
		this.contacts=_contacts;
		this.context=_context;
	}  
    public int getCount() {  
        //设置绘制数量  
        return contacts.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 contactPhotoImageView = null;  
        TextView contactNameTextView = null;  
        TextView contactNumberTextView = null;  
        if (convertView == null || position < contacts.size()) {  
        convertView = LayoutInflater.from(context).inflate(  
            R.layout.contactlist, null);  
        contactPhotoImageView = (ImageView) convertView.findViewById(R.id.contactPhoto);  
        contactNameTextView = (TextView) convertView.findViewById(R.id.contactName);  
        contactNumberTextView = (TextView) convertView.findViewById(R.id.contactNumber);  
        } 
        //绘制联系人头像  
        contactPhotoImageView.setImageBitmap(contacts.get(position).getContactPhoto());  
        //绘制联系人名称  
        contactNameTextView.setText(contacts.get(position).getContactName());  
        //绘制联系人号码  
        contactNumberTextView.setText("("+contacts.get(position).getContactNumber()+")");  
        return convertView;  
    }  
}  
4)修改MainActivity.java代码将自定ListAdapeter绑定给ListView代码如下

package com.example.androidapp;

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

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.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {

	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 ListView mListView = null;  
    
    private MyListAdapter myAdapter=null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mContext = this; 
		mListView=(ListView)findViewById(R.id.listView1);
		/**得到手机通讯录联系人信息**/ 
		ArrayList<Contact> contacts=getPhoneContacts();
		myAdapter=new MyListAdapter(contacts,mContext);
		mListView.setAdapter(myAdapter);
	}
	/**得到手机通讯录联系人信息**/
    private ArrayList<Contact> getPhoneContacts() {
        /**联系人**/  
        ArrayList<Contact> contacts=new ArrayList<Contact>();
        
		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.ic_launcher);
				}
				Contact contact=new Contact();
				contact.setContactName(contactName);
				contact.setContactNumber(phoneNumber);
				contact.setContactPhoto(contactPhoto);
				contacts.add(contact);
		    }
		    phoneCursor.close();
		}
		return contacts;
    }
	@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;
	}

}

5)最重要的是须要AndroidManifest.xml中 加入权限 否则代码会报错的。 千万别忘了。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值