在微信中,手机QQ中你会发现软件读取手机通讯录这个功能,这个功能使得软件更好的与手机联系人绑定,从而达到分享,拨打电话,读取用户信息等操作。下面我们将通过一个demo实现这个功能

首先我们看一下效果图:

-----------------------------------------------------------【正题部分】-----------------------------------------------

【开发环境】Android Stdio 1.1.0

【分析】

软件中含有一个控件ListView,这个控件可谓是Android程序设计中最最最最实用的一个控件了,自定义item的布局,控件中的数据来源于你的手机通讯录的内容,所以适配器选择:CursorAdapter或者BaseAdapter,小编使用的是CursorAdapter,取得数据并且赋予item中,demo中还需要重要的一点就是获取读取手机通讯录的权限

【编码】

(1)布局方面的代码小编不予细解,具体看文章下面的demo

(2)联系人信息实体类

package cn.edu.bzu.contacts_listview;

/**
* Created by monster on 2015/4/26.
* 联系人实体类
* 功能:实现了People联系人实体类
*/
public class myFile {
public String PeopleName;
public int ImgId;
public String PeopleNumber; public myFile(String peopleName, int imgId, String peopleNumber) {
super();
PeopleName = peopleName;
ImgId = imgId;
PeopleNumber = peopleNumber;
} public myFile() {
super();
}
}

(3)联系人列表的适配器

/**
* Created by monster on 2015/4/26.
*/
public class PeopleListAdapter extends CursorAdapter {
private LayoutInflater mInflater;//定义LayoutInflater对象
public PeopleListAdapter(Context context, Cursor c) {
super(context, c);
mInflater=LayoutInflater.from(context);
} @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
//初始化每一个item的View
return mInflater.inflate(R.layout.activity_list_item,parent,false);
} @Override
public void bindView(View view, Context context, Cursor cursor) {
//设置Item的布局效果
ViewHolder viewHolder=new ViewHolder();
viewHolder.PeopleImage=(ImageView)view.findViewById(R.id.IvNews);
viewHolder.PeopleName=(TextView)view.findViewById(R.id.TvNewsTitle);
viewHolder.PeopleNumber=(TextView)view.findViewById(R.id.TvNewsInfo);
//从手机联系人中读取数据
viewHolder.PeopleImage.setBackgroundResource(R.mipmap.ic_launcher);
viewHolder.PeopleName.setText(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
viewHolder.PeopleNumber.setText(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
class ViewHolder{
ImageView PeopleImage;
TextView PeopleName;
TextView PeopleNumber;
}
}

(4)书写MainActivity.java

package cn.edu.bzu.contacts_listview;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView; public class MainActivity extends Activity {
private ListView Lv;
private PeopleListAdapter adapter;
private Cursor cursor;//定义用来存储需要显示的对象的cursor
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();//控件实例化
setData();//设置数据
setLv();//绑定适配器
} private void setLv() {
adapter=new PeopleListAdapter(MainActivity.this,cursor);
Lv.setAdapter(adapter);
} private void setData() {
//通过getContentResolver获取手机中联系人信息
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null); } private void findView() {
Lv=(ListView)findViewById(R.id.LV);
} }

(5)在清单文件中设置权限

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

----------------------------------------------------【总结部分】------------------------------------------------------

【总结】

适配器中继承的是CursorAdapter适配器:必须实现的三个方法为:

public PeopleListAdapter(Context context, Cursor c)

public View newView(Context context, Cursor cursor, ViewGroup parent)  --->>初始化每一个item的View

public void bindView(View view, Context context, Cursor cursor)       ---->>设置Item的布局效果

(读取手机联系人的数据)

cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))  --->>读取联系人姓名的代码

cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))       --->>读取联系人号码的代码

【附录】

源代码地址:https://github.com/monsterLin/contacts_listview

Android程序设计-简单手机通讯录的更多相关文章

  1. 【Android Demo】简单手机通讯录

    Android 系统给我们提供了访问通讯录的接口,通过接口获取通讯录信息.Adapter 与 View 的连接主要依靠 getView 这个方法返回我们需要的自定义 view. ListView 是 ...

  2. Android 个人手机通讯录开发

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示                2. ...

  3. python实现将android手机通讯录vcf文件转化为csv

    经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况,在网上搜索了很久当前不外乎两种处理方式.1.使用电脑的outlook的通讯簿功能,将手机导出的vcf文件导入到outlook的通讯录中,然 ...

  4. Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人

    package com.example.myapi.phonepersion; import java.util.ArrayList; import java.util.List; import an ...

  5. 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。

      package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...

  6. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  7. 20162330 实验四 《Android程序设计》 实验报告

    2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验四 <Android程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623 ...

  8. 实验四 Android程序设计 实验报告

    实验四 Android程序设计 实验报告 目录 代码托管地址 Android程序设计-1 Android程序设计-2 Android程序设计-3 Android程序设计-4 Android程序设计-5 ...

  9. android Glide简单使用

    版权声明:大家可以转载,请写明转载申明 https://blog.csdn.net/bzlj2912009596/article/details/81702367 今天,简单讲讲Android里Gli ...

随机推荐

  1. Cordova - 使用Cordova开发iOS应用实战4(调用摄像头拍照,并编辑)

    使用Cordova可以很方便的通过js代码来使用设备摄像头拍照,只需把camera插件添加进来即可. 一,添加camera插件 首先我们要在“终端”中进入工程所在的目录,然后运行如下命令: 1 cor ...

  2. 利用ganymed-ssh2远程执行其它Linux机器上的shell命令

    实际应用中,有时候需要从web管理界面上,远程去启动其它linux主机上的程序,利用ssh协议可以方便的满足这一需求.事实上hadoop架构中,从nn上启动dn时,就是利用了免密码ssh登录.gany ...

  3. 批处理将字符串输出到Windows剪贴板

    批处理将字符串输出到Windows剪贴板 2016-06-30 23:29 339人阅读 评论(0) 收藏 举报 版权声明:作者:N3verL4nd 出处:http://blog.csdn.net/x ...

  4. The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found 解决办法

    环境:Centos 7 已经下载安装.NET Core 1.1 Microsoft .NET Core Shared Framework Host Version : Build : 928f77c4 ...

  5. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))

    PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...

  6. 也来山寨一版Flappy Bird (js版)

    随着Flappy Bird的火爆,各种实现的版也不断出现,于是也手痒简单实现了一版. 其实本来只是想实现一下这只笨鸟的飞翔运动的,后来没忍住,就直接实现一个完整游戏了…… 因为这个游戏本身实现起来就没 ...

  7. VS2013无法链接到TFS(Visual studio online),错误TF31001,TF31002

    TF31002: Unable to connect to VisualStudio Online with VS 2013 but I can using web access - Windows ...

  8. md5加密31位

    今天将其它服务器里的用户数据导入到新的系统数据库中 出现密码不匹配情况 查看原来数据库中密码得到结果位: 原服务器密码 明文 正确32位密闻 67b14728ad9902aecba32e22fa4f6 ...

  9. python基础--基本数据类型考试_day3

    1.执行 Python 脚本的两种方式 终端和交互模式 法1:python helloword.py 法2:ps: 执行前需给预chmod 755 helloword.py (linux系统中)./h ...

  10. applicationContext.xml和dispatcher-servlet.xml的区别

    在SpringMVC项目中我们一般会引入applicationContext.xml和dispatcher-servlet.xml两个配置文件,这两个配置文件具体的区别是什么呢? Spring 官方文 ...