文档章节

ContentResolver获取手机联系人

Leozhu
 Leozhu
发布于 2015/02/26 14:59
字数 707
阅读 46
收藏 0

android系统的联系人是通过ContentProvider来提供的,想要获取联系人可使用ContentResolver。不啰嗦上代码

public class MainActivity extends Activity {
//用来展示联系人
ListView listview = null;
//展示联系人的适配器
MylistAdapter myadapter = null;

//存放联系人名称的listview
ArrayList<String> nameList = new ArrayList<String>();
//存放联系人号码的listview	
ArrayList<String> numberList = new ArrayList<String>();
//存放联系人头像的列表	
ArrayList<Bitmap> headList = new ArrayList<Bitmap>();

/** 获取库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>();

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	listview = (ListView) findViewById(R.id.listview);

	getNumber();

	MylistAdapter adapter = new MylistAdapter();

	View view = null;
	view = view.inflate(MainActivity.this, R.layout.contactcount, null);
	TextView textCount = (TextView) view.findViewById(R.id.count);
	textCount.setText(nameList.size() + "位联系人");
	//listview底部添加底部标题
            listview.addFooterView(view);

	listview.setAdapter(adapter);

}

//获取联系人方法
public void getNumber() {

//获取ContentResolver实例
	ContentResolver resolver = MainActivity.this.getContentResolver();

//使用ContentResolver通过uri和获取字段
	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); //获取联系人姓名 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.head);
			}

			nameList.add(contactName);
			numberList.add(phoneNumber);
			headList.add(contactPhoto);

		}
	}
}
}


class MylistAdapter extends BaseAdapter {
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return nameList.size();
	}

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

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		convertView = convertView.inflate(MainActivity.this,
				R.layout.contactitem, null);

		ImageView head = (ImageView) convertView.findViewById(R.id.head);
		TextView name = (TextView) convertView.findViewById(R.id.name);
		TextView num = (TextView) convertView.findViewById(R.id.num);

		head.setImageBitmap(headList.get(position));
		name.setText(nameList.get(position));
		num.setText(numberList.get(position));

		return convertView;
	}
}

布局见下方,至于图片随便弄个放在drawable文件中,manifest文件注意添加读取联系人权限

主界面布局 <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" >

<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</ListView>

</RelativeLayout>

列表条目布局 <?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="match_parent">

<ImageView
    android:id="@+id/head"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="10dp"
    android:layout_width="20dp"
    android:layout_height="20dp" />

<TextView
    android:id="@+id/name"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/num"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</RelativeLayout>

列表底部布局 <?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="match_parent" >

<TextView android:id="@+id/count"
    android:layout_centerInParent="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</RelativeLayout>

© 著作权归作者所有

共有 人打赏支持
Leozhu
粉丝 0
博文 4
码字总数 791
作品 0
海淀
私信 提问
获取通讯录所有联系人的注意事项

上周写代码出现了一个bug,获取通讯录联系人的时候,总是不能够获取到只有名字,没有手机号的联系人。头疼了很久,记录一下。 我们都知道想要获取通讯录的所有联系人,肯定是要从手机的本地数...

小鹿啊小鹿
2017/03/20
0
0
关于Android中Contact API的讲解

今日学习任务:实现读取手机中所有联系人的主要信息(名称和联系电话),并以ListView显示 涉及的主要内容:1) Contact API的结构和使用方法 2) ContentProvider组件作用,URI概念及使用方法...

大爱rails
2013/07/04
0
0
说说 Android 的内容提供器(ContentResolver )

如果一个 APP 使用内容提供器对其数据提供了对外访问的接口,那么任何其他的 APP 都可以访问这部分的数据啦,像 Android 中的电话簿、短信等程序都提供了类似的访问接口。 1 ContentResolve...

deniro
05/05
0
0
this.getContentResolver空指针问题

我的代码如下: 运行之后上面获取ContentResolver的时候会报空指针。是什么问题呢。 看了网上一些人的帖子也是这样直接使用this得到的。 ============================================ 上面...

葬天尘
2015/10/22
831
1
基础总结篇之六:ContentProvider之读写联系人

今天我们来讲解一下如何利用ContentProvider机制读写联系人信息。 在Android中,ContentProvider是一种数据包装器,适合在不同进程间实现信息的共享。例如,在Android中SQLite数据库是一个典...

andy521zhu
2015/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
46分钟前
3
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
141
5
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
21
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
31
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部