1.读取手机联系人是一个复杂的操作所以一般放在一个新的线程中。

2.获取一个ContentResolver.

 ContentResolver resolver =getContentResolver();  

3.对Resolver进行查询操作

new Thread(){
    public void run() {
    //获取内容提供者
    ContentResolver resolver =getContentResolver();
    //进行查询操作,获取存在表中的数据,获取唯一的ID,根据ID查询下面的数据
    Cursor cursor=resolver.query(Uri.parse(urlString), new String[]{"contact_id"}, null, null, null);

while (cursor.moveToNext()) {

//因为只有一个数据所以传入0就可以

String id =cursor.getString(0);
Log.e("ChainLog","+++++++++++++++++" +id);
ContentResolver indexre =getContentResolver();
//根据ID查询数据和数据对应的类型
        Cursor indexCursor =indexre.query(Uri.parse("content://com.android.contacts/data"),
        new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, null);
        //生成一个MAP对象来存储数据
        HashMap<String, String> hashMap =new HashMap<String, String>();
        while (indexCursor.moveToNext()) {
//Log.e("ChainLog", indexCursor.getString(0)) ;
//Log.e("ChainLog", indexCursor.getString(1)) ;
        String type =indexCursor.getString(1);
   String dataString=indexCursor.getString(0);
   //判断是否为空
   if(!TextUtils.isEmpty(dataString)){
    //判断类型如果是姓名
   if(type.equals("vnd.android.cursor.item/name")){ 
    hashMap.put("name", dataString);
    Log.e("ChainLog", "名字是"+dataString);
    //判断类型是否为电话号码
   }else if (type.equals("vnd.android.cursor.item/phone_v2")) {
hashMap.put("phone", dataString);
Log.e("ChainLog", "电话是"+dataString);
}
}
}
        indexCursor.close();
        //将数据存放到list集合中
        list.add(hashMap);
}
                 handler.sendEmptyMessage(0);  
    cursor.close();
    };
    }.start();

5.生成Adpter来存放数据

  //生成一个Adapter
    public class MyAdapter extends BaseAdapter{
public int getCount() {
// 返回list的长度
return list.size();
}
public HashMap<String, String> getItem(int arg0) {
// 返回每一个条目的东西(声明为MAP类型)
return  list.get(arg0); //返回list中的数据 
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {
//自定义view
View view =View.inflate(MainActivity.this, R.layout.contact_list, null);
TextView tv_name=(TextView) view.findViewById(R.id.tv_name);
TextView tv_phone=(TextView) view.findViewById(R.id.tv_phone);
        tv_name.setText(getItem(arg0).get("name"));
        tv_phone.setText(getItem(arg0).get("phone"));
return view;
}
    }

6.设置每一个条目的点击事件 

 mlist=(ListView)findViewById(R.id.list_contact);
mlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
    mAdapter= new MyAdapter();
    if (mAdapter!=null) {
HashMap<String, String> map= mAdapter.getItem(arg2);
String phoneString= map.get("phone");
Toast.makeText(MainActivity.this, phoneString, 0).show();
}
}
});

360-读取手机联系人相关推荐

  1. 读取手机联系人,并用listview显示

    读取手机联系人,用到的就是一个contentprovider. 数据库里面有三张重要的表 raw_contact 里面有所有联系人的数据 data 每个联系人的所有数据 mime-type 每条数据的 ...

  2. Android 保存号码至已有联系人,新建联系人,读取手机联系人

    添加必要的权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> & ...

  3. java 添加手机联系人_Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结...

    本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 ...

  4. java 获取手机联系人_Android 读取手机联系人、拨号、发送短信及长按菜单的操作...

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  5. 读取手机联系人简单方法(id,姓名,手机号)

    <uses-permission android:name="android.permission.READ_CONTACTS"/> 布局文件 <?xml ver ...

  6. Android内容提供者(读取手机联系人信息)

    工程目录: Manifestes加入读取联系人权限 <uses-permission android:name="android.permission.READ_CONTACTS&qu ...

  7. Android使用READ_CONTACTS读取手机联系人

    实例代码: package com.example.readcontacts;import java.io.InputStream; import java.util.ArrayList;import ...

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

    导出手机联系人数据库,找到数据的存储结构 数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表: ...

  9. html5调用联系人列表,h5+ 读取手机联系人并渲染

    完整的代码 v-for="(contactObj, index) in item.contactArr" :key="index" :title="c ...

  10. Android项目——读取手机联系人信息

    加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...

最新文章

  1. 启动ServerManager
  2. Windows学习总结(6)——MindManager新手入门教程
  3. dvd vlc 复制_如何使用VLC翻录DVD
  4. 西雅图治安_数据科学家对西雅图住宿业务的分析
  5. vs2010常见错误记录
  6. 简单的策略模式Strategy演示
  7. 使用python制作ArcGIS插件(5)其他技巧
  8. php inputcsv,php实现CSV文件导入和导出
  9. python:使用strip()去掉首尾空格
  10. php中合并数组保留键值,如何使用php合并数组并保留键值的方法
  11. ForkJoinPool 详解
  12. 手游开发者大会交流OGEngine新版本发布
  13. 实验一:数据结构之顺序表例程 简易电话薄
  14. 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦
  15. CSDN-markdown语法之如何插入图片
  16. 20230407 定时闹钟
  17. 171002 逆向-Reversing.kr(AutoHotKey)
  18. Java实验报告之java面向对象编程
  19. 【财经期刊FM-Radio|2020年11月19日】
  20. 发那科2021参数_发那科系统FANUC:参数修改。

热门文章

  1. Yii2使用PHPExcel读取excel
  2. 神经网络模型的训练过程,神经网络模型训练过程
  3. 解决:Error: Continuous value supplied to discrete scale
  4. 【校园招聘】不知道校园招聘是什么?怎么拿BAT,TMD的offer?
  5. 谷歌浏览器皮肤怎么换 修改谷歌浏览器皮肤的方法
  6. 飞机游戏,飞机大战,c#,源代码
  7. 分析:2014年“净网行动”大风暴来袭
  8. 解决ORCLE-ORA-01122 01110 01210
  9. 刚刚!科技部、教育部公布重磅名单!20所“双一流”高校入选
  10. java获取微信小程序码和小程序二维码