Android读取手机联系人

本文介绍了一种在Android应用中获取设备上联系人信息的方法,包括从SIM卡及手机内存中读取联系人姓名与电话号码的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值