获取ContentResolver内容解析器对象,通过getContentResolver()方法

调用ContentResolver对象的query()方法,得到raw_contacts表里面的数据,得到Cursor对象

参数:Uri对象,字段String数组

获取Uri对象,通过Uri.parse(“content://com.android.contacts/raw_contacts”)方法,

while循环Cursor对象,条件是Cursor对象moveToNext()方法为真

调用Cursor对象的getString()方法,参数是索引

判断不为null,查询另一张表

调用ContentResolver对象的query()方法,得到data表里面的数据,得到Cursor对象

参数:Uri对象,字段String[]数组(data1,mimetype),条件String,条件值String[]数组(contact_id)

Uri对象是Uri.parse(“content://com.android.contacts/data”)

循环和上面一样

姓名对应的类型是vnd.android.cursor.item/name

电话对应的类型是vnd.android.cursor.item/phone_v2

需要权限,android.permisssion.READ_CONTACTS

调用ListView对象的setAdapter()方法,分配数据到视图,参数是Adapter对象

通过new SimpleAdapter()来获得Adapter对象

参数:上下文,数据集合,布局资源,字段String[]数组,控件int[] id数组

package com.qingguow.mobilesafe.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
/**
* 读取手机联系人
* @author taoshihan
*
*/
public class PhoneContactsUtil {
public static List<Map<String,String>> getContacts(Context context){
ContentResolver resolver=context.getContentResolver();
Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri=Uri.parse("content://com.android.contacts/data");
List<Map<String,String>> contacts=new ArrayList<Map<String,String>>(); //循环联系人表
Cursor cursor=resolver.query(uri, new String[]{"contact_id"}, null, null, null);
while(cursor.moveToNext()){
String id=cursor.getString(cursor.getColumnIndex("contact_id"));
if(id!=null){
Map<String,String> contact=new HashMap<String,String>();
//查找数据表
Cursor dataCursor=resolver.query(dataUri, new String[]{"data1","mimetype"},"raw_contact_id=?", new String[]{id}, null);
while(dataCursor.moveToNext()){
String data1=dataCursor.getString(dataCursor.getColumnIndex("data1"));
String mimetype=dataCursor.getString(dataCursor.getColumnIndex("mimetype"));
System.out.println("data1:"+data1+",mimetype:"+mimetype);
if(mimetype.equals("vnd.android.cursor.item/name")){
contact.put("name", data1);
}else if(mimetype.equals("vnd.android.cursor.item/phone_v2")){
contact.put("phone", data1);
}
}
contacts.add(contact);
dataCursor.close();
}
}
cursor.close();
return contacts;
}
}

[android] 手机卫士读取联系人的更多相关文章

  1. Android 手机卫士--获取联系人信息并显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...

  2. Android 手机卫士--设置界面&功能列表界面跳转逻辑处理

    在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...

  3. Android 手机卫士--弹出对话框

    在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private ...

  4. Android 手机卫士--参照文档编写选择器

    本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...

  5. Android 手机卫士--确认密码对话框编写

    本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...

  6. Android 手机卫士--签名文件说明&包名说明

    在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...

  7. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  8. Android 手机卫士--阶段小结1

    本文地址:http://www.cnblogs.com/wuyudong/p/5904528.html,转载请注明源地址. 本文对之前手机卫士开发进行一个小结. 1.SplashActivity 版本 ...

  9. Android 手机卫士--安装过程中点击回退按钮

    本文地址:http://www.cnblogs.com/wuyudong/p/5903707.html,转载请注明源地址. 在手机卫士之前的版本升级的对话框中: 有的用户暂时不想更新,没有点击“稍后再 ...

随机推荐

  1. C#语言不常用语法笔记

    只看过3天C#语法书,了解个大概,与C++等不同之处,或者看开源遇到一些奇异用法,记录一下,脑子不够用的情况下,还是记笔记靠谱. ==================== 顺便吐槽下,这年头得会各种编 ...

  2. 《MarkMark学习笔记学习笔记》html学习笔记

    iframe里有一个srcdoc属性,很有用! window.location.href=document.referrer//可以实现返回上一级页面并刷新 HTML5权威指南©®,比较老的书了,有些 ...

  3. segmentController

    xml <view class="segmentedControl">     <!-- 循环遍历 -->     <block wx:for=&qu ...

  4. 【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import

    Pycharm 2016.2执行单元测试遇到如下问题: RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handlin ...

  5. create-react-app创建的项目npm run build之后静态文件找不到

    create-react-app创建的项目npm run build之后,运行build中的index.html,什么都没显示,打开浏览器的F12,发现了几个红色的报错,提示几个文件找不到. 查看生成 ...

  6. Spring集合注入

    1.集合注入 上一篇博客讲了spring得属性注入,通过value属性来配置基本数据类型,通过<property>标签的 ref 属性来配置对象的引用.如果想注入多个数据,那我们就要用到集 ...

  7. php 从2维数组组合为四维数组分析(项目中前台侧边栏导航三级分类显示)

    foreach函数(循环函数)内嵌套循环函数时,当内层完全循环完后,才会向上一级循环 数组要注意问题 array_merge----合并一个或多个数组 将一个或多个数组的单元合并起来,一个数组中的值附 ...

  8. 深圳scala-meetup-20180902(1)- Monadic 编程风格

    刚完成了9月份深圳scala-meetup,趁刮台风有空,把我在meetup里的分享在这里发表一下.我这次的分享主要分三个主题:“Monadic编程风格“.”Future vs Task and Re ...

  9. 用document.readyState实现网页加载进度条

    概述 之前以为给网页设置加载进度条很麻烦,今天一学真是超级简单,记录下来供以后开发时参考,相信对其他人也有用. readyState 主要运用了document.readyState和nprogres ...

  10. docker 中ulimit设置理解

    背景: 在k8s上跑es集群碰到的问题 OS版本 红旗4.5(基于centos6.8 内核) Docker:1.17.02 现象: 本次出现的问题现象:es pod启动失败,一直报max file d ...