android分页查询获取系统联系人信息

package com.example.yqqmobilesafe.ContactProvider;

import java.util.ArrayList;
import java.util.List;

import android.R.integer;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;

import android.provider.ContactsContract;

import com.example.yqqmobilesafe.domain.ContactInfo;

public class ContactInfoProvider {
	private Context mContext;
	public ContactInfoProvider(Context context) {
		mContext=context;

	}
	/**
	 * 获取系统联系人信息
	 * @return
	 */
	public  List<ContactInfo> getSystemContactInfos(){
		List<ContactInfo> infos=new ArrayList<ContactInfo>();

		// 使用ContentResolver查找联系人数据
		Cursor cursor = mContext.getContentResolver().query(
			ContactsContract.Contacts.CONTENT_URI, null, null,
			null, null);

		// 遍历查询结果,获取系统中所有联系人
		while (cursor.moveToNext())
		{
			ContactInfo info=new ContactInfo();
			// 获取联系人ID
			String contactId = cursor.getString(cursor
				.getColumnIndex(ContactsContract.Contacts._ID));
			// 获取联系人的名字
			String name = cursor.getString(cursor.getColumnIndex(
				ContactsContract.Contacts.DISPLAY_NAME));
			info.setContactName(name);

			// 使用ContentResolver查找联系人的电话号码
			Cursor phones = mContext.getContentResolver().query(
				ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
				null,
				ContactsContract.CommonDataKinds.Phone.CONTACT_ID
					+ " = " + contactId, null, null);

			// 遍历查询结果,获取该联系人的多个电话号码
			while (phones.moveToNext())
			{
				// 获取查询结果中电话号码列中数据。
				String phoneNumber = phones.getString(phones
					.getColumnIndex(ContactsContract
					.CommonDataKinds.Phone.NUMBER));
				info.setPhoneNumber(phoneNumber);
			}
			phones.close();

			infos.add(info);
			info=null;
		}
		cursor.close();

		return infos;

	}

	/**
	 * 分页查询系统联系人信息
	 * @param pageSize 每页最大的数目
	 * @param currentOffset 当前的偏移量
	 * @return
	 */
	public List<ContactInfo> getContactsByPage(int pageSize,int currentOffset) {

		List<ContactInfo> infos=new ArrayList<ContactInfo>();
				Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
				String[] projection = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
										ContactsContract.CommonDataKinds.Phone.DATA1, "sort_key"};
				Cursor cursor = mContext.getContentResolver().query(uri, projection, null, null, "sort_key COLLATE LOCALIZED asc limit " + pageSize + " offset " + currentOffset);
				if (cursor != null) {

					while (cursor.moveToNext()) {

						ContactInfo info=new ContactInfo();
						String contactName = cursor.getString(0);
						String phoneNumber = cursor.getString(1);
						info.setContactName(contactName);
						info.setPhoneNumber(phoneNumber);
						infos.add(info);
						info=null;
					}
					cursor.close();

	}
				return infos;
	}

	/**
	 * 获得系统联系人的所有记录数目
	 * @return
	 */
	public int getAllCounts(){
		int num=0;
		// 使用ContentResolver查找联系人数据
				Cursor cursor = mContext.getContentResolver().query(
					ContactsContract.Contacts.CONTENT_URI, null, null,
					null, null);

				// 遍历查询结果,获取系统中所有联系人
				while (cursor.moveToNext())
				{
					num++;
				}
				cursor.close();

		return num;
	}

}

时间: 2024-08-02 15:28:57

android分页查询获取系统联系人信息的相关文章

【android基础】读取系统联系人信息和添加一条联系人信息到通讯录

一,读取系统联系人信息 I,准备工作 同样,要读取系统联系人的数据库文件,首先要确定主机名和匹配规则. 我们将联系人的数据库文件导出来查看时,有下面几点需要知道: 1)联系人的数据,比如name,number,email都存储在data表的data1列. 2)区分不同联系人的列为raw_contact_id,它对应于raw_contacts表中的contact_id列 3)区分联系人数据类型的列位于mimetype列,其中1表示emial,5表示电话,7表示姓名. II,思路 读取联系人的信息,

Android学习之获取系统应用信息列表的实现

前言: 好几天电脑打不开CSDN博客,也不知道怎么回事,今天下班回来突然能打开了,遂将周末实现的一个效果贴上. 实现功能: 获取手机应用图标,名称,时间(安装时间/更新时间),大小,侧滑删除应用,点击应用图标分享等功能. 目标效果: 思路:RecylerView+swipereveallayout 贴上dependencies 介绍:Glide实现图片加载,EventBus通信,swipereveallayout实现侧滑. 获取数据源: private ArrayList<AppInfoMode

Android手机获取通讯录联系人信息及短信广播实现

现在越来越多的android应用在注册时都要用到手机号码,通过获取手机验证码来完成注册.也有不少应用提供了手机通讯录备份功能,获得你的允许后把你的通讯录中的手机号码保存到服务器中,你要的时候又可以down下来,比如微信,QQ等就有这们的功能.那我们怎么样获取用户通讯录中的手机号码呢?Android已经为我们做好了准备: ---------------------------------获取通讯录联系人信息----------------------------------------------

Android获取全部联系人信息的例子

先定义一个显示条目的xml布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_conte

获取系统联系人&&添加系统联系人

联系人在这个包下 contacts2.db数据库 查询所有的联系人; 需要读写contact权限,注意Uri   content是小写的 找这个错误找了一个小时,汗-  -!! 这个程序只是添加个按钮. package com.example.getcontacts; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android

iOS开发------获取系统联系人(AddressBook篇)

AddressBook是Apple提供给我们获取系统联系人的一个很方便类库,与其说方便,其实刚开始还是比较崩溃的,从开发文档来看,它还是偏向于C语言,并且不在ARC的控制之下,虽然在iOS9.0之后会被Contacts.framework替代,但在工作中要对最低版本进行兼容,了解一下这个类库还是很有必要的.这里就介绍一下获取联系人信息的那些方法,对于修改,添加删除等操作,想留在下一篇介绍AddressBookUI这个类库的时候来写一下. 代码GitHub:https://github.com/Y

获取系统版本信息和处理器信息

// GetSystemInfo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <windows.h> #include <iomanip> using namespace std; int main() { SYSTEM_INFO systemInfo; GetSystemI

Android中StatFs获取系统/sdcard存储(剩余空间)大小

package com.orgcent.util; import java.io.File; import android.os.Environment; import android.os.StatFs; public class MemoryStatus { static final int ERROR = -1; /** * 外部存储是否可用 * @return */ static public boolean externalMemoryAvailable() { return andr

Android开发之获取系统12/24小时制的时间

//通过DateFormat获取系统的时间 String currentTime=DateFormat.format("yyyy-MM-dd hh-mm-ss", new Date()).toString(); currentTime="通过DateFormat获取的时间:\n"+currentTime; //通过SimpleDateFormat获取24小时制时间 SimpleDateFormat sdf=new SimpleDateFormat("yyy