Android读取手机联系人

原创 2018年04月15日 21:43:13
package com.example.contactstest;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;

public class MainActivity extends Activity {

	private static final String LINE_SEPARATOR = System.getProperty("line.separator");// 换行
	private TextView contacts_show;

	private Cursor dataCursor;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		contacts_show = (TextView) findViewById(R.id.contacts_show);

		search();
	}

	private void search() {
		final ContentResolver resolver = getApplicationContext().getContentResolver();
		final Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		final Uri dataUri = Uri.parse("content://com.android.contacts/data");
		final Cursor cursor = resolver.query(uri, null, null, null, null);
		while (cursor.moveToNext()) {
			// 得到联系人id
			String id = cursor.getString(cursor.getColumnIndex("contact_id"));

			if (id != null) {
				// 输出结果
				contacts_show.append("contacts_id=" + id + LINE_SEPARATOR);

				dataCursor = resolver.query(dataUri, null, "raw_contact_id=?",
						new String[] { id }, null);
				while (dataCursor.moveToNext()) {
					String data1 = dataCursor.getString(dataCursor
							.getColumnIndex("data1"));
					String mimetype = dataCursor.getString(dataCursor
							.getColumnIndex("mimetype"));
					contacts_show.append("data1=" + data1 + LINE_SEPARATOR);
					contacts_show.append("mimetype=" + mimetype + LINE_SEPARATOR);
					contacts_show.append(LINE_SEPARATOR);
				}
				dataCursor.close();
			}
		}
		cursor.close();
	}

	// 查找
	private void find() {
		/**
		 * Uri的得到:
		 * 
		 * 联系人号码 Uri uri =
		 * Uri.parse("content://com.android.contacts/data/phones"); 所有联系人 Uri
		 * uri = Uri.parse("content://contacts/people"); Uri uri =
		 * ContactsContract.Contacts.CONTENT_URI; Uri uri =
		 * Uri.parse("content://icc/adn");SIM卡
		 * 
		 */

		// SIM卡Uri
		Uri SIMUri = Uri.parse("content://icc/adn");
		// 所有联系人Uri
		Uri personUri = Uri.parse("content://contacts/people");
		// 联系人手机号Uri
		Uri phoneUri = Uri.parse("content://com.android.contacts/data/phones");

		// 查询数据
		ContentResolver resolver = getApplicationContext().getContentResolver();

		/**
		 * 三种条件的Cursor对象
		 */
		// 联系人
		Cursor personCursor = resolver.query(personUri, null, null, null, null);
		// 联系人手机号
		Cursor phoneCursor = resolver.query(phoneUri, null, null, null, null);
		// SIM
		Cursor SIMCursor = resolver.query(SIMUri, null, null, null, null);
		// Cursor cursor = resolver.query(uri,null,null,null,"personid asc");

		// 取出SIM所有联系人
		while (SIMCursor.moveToNext()) {

			/**
			 * cursor.getColumnIndex("name"):得到给定的列名称,如果列名称不存在,则为1
			 * 
			 * 手机联系人 cursor.getColumnIndex("name")
			 * cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
			 * phoneCursor
			 * .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
			 */
			String phone = SIMCursor.getString(1);
			// 得到联系人姓名
			String name = SIMCursor.getString(SIMCursor.getColumnIndex("name"));
			contacts_show.append(name + ":" + phone + LINE_SEPARATOR);

		}
		// 取出 手机 所有联系人
		while (phoneCursor.moveToNext() && personCursor.moveToNext()) {

			String phone = phoneCursor
					.getString(phoneCursor
							.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
			String phoneName = personCursor.getString(personCursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

			contacts_show.append(phoneName + ":" + phone + LINE_SEPARATOR);
		}
	}

}

Android程序如何读取手机联系人

导出手机联系人数据库,找到数据的存储结构数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表...
  • ft115637850
  • ft115637850
  • 2015-06-15 20:58:01
  • 1505

Android中获取手机中的联系人信息

Android获取手机中的联系人信息
  • hong_world
  • hong_world
  • 2016-06-11 21:22:33
  • 7056

ContentResolver获取手机联系人

首先ContentResolver是一个通过uri进行跨进程通信,如果是是自己测试的话需要一个数据库和一个ContentProvider来打开一个Uri然后用ContentResolver进入获取。 ...
  • c2248933892
  • c2248933892
  • 2017-03-29 10:11:08
  • 836

Android-ContentProvider读取和插入手机联系人

目标效果:   先在模拟器随便添加两个联系人,运行程序,再打开联系人,发现多了联系人“张三”,并且日志输出了三给安溪人的姓名和手机号码还有号码类型。(运行多次,所以插入的id不为3了) 1.a...
  • hester_hester
  • hester_hester
  • 2016-05-07 20:47:01
  • 1402

仿微信联系人手机获取适配7.0

  • 2017年11月03日 16:01
  • 36.38MB
  • 下载

Android进阶之读取手机联系人显示listview并点击拨号(CursorAdapter)

一、CursorAdapter介绍1、继承于BaseAdapter是个虚类,它为cursor和ListView提供了连接的桥梁。 如:public abstract class CursorAdap...
  • chenliguan
  • chenliguan
  • 2015-09-09 15:06:43
  • 960

Android -ContentProvider之获取手机联系人

在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家...
  • qiuqiu_qiuqiu123
  • qiuqiu_qiuqiu123
  • 2017-02-11 15:17:30
  • 1727

Android:ContentProvider获取手机联系人列表

这次带来的是手机通讯录常用字段的展示直接上代码,看注释:activity_main.xml: ...
  • James_lang
  • James_lang
  • 2017-02-22 02:00:46
  • 3371

基于Android studio的手机联系人信息获取

最近需要做到这么一个功能,获取联系人信息,并且将联系人姓名和电话显示到屏幕上,上网查了很多资料,折腾了很久才做出来,特此写下感想。代码原理不多讲,度娘一大堆,在贴代码之前想说一下过程中容易忽略的地方:...
  • qq_28300459
  • qq_28300459
  • 2018-03-27 20:37:52
  • 67

android 读取联系人demo

  • 2015年12月07日 22:32
  • 1.11MB
  • 下载
收藏助手
不良信息举报
您举报文章:Android读取手机联系人
举报原因:
原因补充:

(最多只允许输入30个字)