实现一个简单的拨号器程序(1)-获取所有联系人

为了在拨号的时候能够实时显示所有可能匹配的联系人(实际上没什么用,如果记住了号码那比去通讯录中找要快多了),首先写出一个获取系统的Contacts的ContentProvider的方法,我查找所有联系人的姓名和电话号码的方法如下:

 1 void search(){
 2         ContentResolver cr = getContentResolver();
 3
 4         String[] projection = new String[]{
 5                 ContactsContract.Contacts._ID
 6         };
 7
 8         Cursor idCursor = cr.query(ContactsContract.Contacts.CONTENT_URI,projection,null,null,null);
 9
10         String id;
11         while(idCursor.moveToNext()){
12             int idIdx =  idCursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID);
13             id=idCursor.getString(idIdx);
14             printContacts(id);
15         }
16
17         idCursor.close();
18     }
19
20     void printContacts(String id){
21         if(id!=null){
22             String where = ContactsContract.Data.CONTACT_ID+" = "+id +" AND "+ ContactsContract.Data.MIMETYPE+" = ‘"+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE+"‘";
23
24             String[] projection = new String[]{
25                     ContactsContract.Data.DISPLAY_NAME,
26                     ContactsContract.CommonDataKinds.Phone.NUMBER
27             };
28
29             Cursor dataCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,projection,where,null,null);
30
31             int nameIdx = dataCursor.getColumnIndexOrThrow(ContactsContract.Data.DISPLAY_NAME);
32             int phoneIdx = dataCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
33
34             String[] result = new String[dataCursor.getCount()];
35
36             while(dataCursor.moveToNext()){
37                 String name = dataCursor.getString(nameIdx);
38                 String number = dataCursor.getString(phoneIdx);
39                 number = number.replaceAll(" +", "");
40                 result[dataCursor.getPosition()] = name +" {"+number+"}";
41             }
42
43             dataCursor.close();
44
45             for(String item : result){
46                 Log.i("TAG",item);
47             }
48         }
49     }

以上代码来自Android 4高级编程。

总体过程就是通过查询到每个联系人信息的ID,然后通过另一个查询查询与此程序关联的联系人信息。

还可以获取联系人的头像缩略图,只需要在projection中加入:

String[] projection = new String[]{
                    ContactsContract.Data.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.Data.PHOTO_THUMBNAIL_URI
            };

最后那个条件,然后正常获取String类型的ImageURI即可:

int nameIdx = dataCursor.getColumnIndexOrThrow(ContactsContract.Data.DISPLAY_NAME);
            int phoneIdx = dataCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
            int thumbnail = dataCursor.getColumnIndexOrThrow(ContactsContract.Data.PHOTO_THUMBNAIL_URI);

            String[] result = new String[dataCursor.getCount()];

            while(dataCursor.moveToNext()) {
                String name = dataCursor.getString(nameIdx);
                String number = dataCursor.getString(phoneIdx);
                String thumb = dataCursor.getString(thumbnail);
                number = number.replaceAll(" +", "");
                result[dataCursor.getPosition()] = name + " {" + number + "} , " + thumb;
            }

通过ImageView的setImageURI()方法可以直接使用本地图片URI,如:

imageView.setImageURI(Uri.parse(thumb));

涉及隐私,这里就不再显示我的手机上的测试结果。

下一步计划是分离查询结果,在拨号界面中用ListView显示出来。

时间: 2024-09-28 20:59:45

实现一个简单的拨号器程序(1)-获取所有联系人的相关文章

可视化程序设计基础(三)——一个简单的播放器(并不)

本次的作业是制作一个简单的播放器,功能仅限于播放视频和音频,虽说是简单的播放器,但其中还是有很多细节需要注意的. 问题一:布局 本来这个问题不应该是一个问题了,之前老师讲过的Stackpanel和Grid等对于布局一个播放器来说绰绰有余,但上次上课老师提到的NavigationView令我十分感兴趣,这是一个uwp应用程序中随处可见的一种布局,节省了开发者很多的时间. 所以我就着手于建立这个NavigationView了,首先我看了一下XAML Controls Gallery,然而其中关于Na

用L脚本语言开发一个简单的局域网聊天程序

#scp #这是一个简单的局域网聊天程序的例子 定义:字符串,string1 定义:字符串,string2 #addr1是对方的地址 #addr2是自己的地址 #如果addr1和addr2相同,就是自己和自己聊天 定义:地址,addr1,127.0.0.1,27015 定义:地址,addr2,127.0.0.1,27015 定义:整数,字节数,0 #在自己的UDP端口上监听 定义:网络连接,conn2,UDP 监听:conn2,addr2 #连接对方的UDP端口 定义:网络连接,conn1,UD

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcarsgroup.h // 07-汽车展示(高级) // // Created by apple on 14-5-28. // Copyright (c) 2014年 itcase. All rights reserved. // #import <Foundation/Foundation.h> @

一个简单 的Shell 显示程序

#!/bin/bash clear declare FirstName Greeting   Greeting="Hello ," echo "" echo "Enter Your First Name:" read FirstName echo "$Greeting $FirstName" 首先   vim  Print  回车 然后   i   进入插入状态 编辑以上代码,Esc 键回车 输入   chmod  711 P

Java实现的一个简单的下载器

package com.shawearn.download;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import java.io.File;http://www.huiyi8.com/jiaoben/import j

编写一个简单的jdbc例子程序

1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class Base { 10 11 public static void main(String[] args) th

一个简单的键盘钩子程序

实现适时监视键盘,并将按键信息保存在TXT文件中的程序       Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取.启动和关闭应用程序的消息等.本文在VC6编程环境下实现了一个简单的键盘钩子程序,并对Win32全局钩子的运行机制.Win

利用java的Socket实现一个简单hello/hi聊天程序

利用java的Socket实现一个简单hello/hi聊天程序 首先,我们来用java实现一个简单的hello/hi聊天程序.在这个程序里,我学习到了怎么用socket套接套接字来进行编程.简单理解了一些关于socket套接字和底层调用的关系.关于java的封装思想,我学会了一些东西,java里真的是万物皆对象.还学到了一点多线程的知识. TCP 在这里,不得不先介绍以下TCP.TCP是传输层面向连接的协议.提供了端到端的进程之间的通信方式.TCP在通信之前要先建立连接.这里我们称这个建立连接的

【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间

打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多,5毛钱一根,还有几根1.5的. 嗯 接着说gcc的事 先把源代码贴上来 //gettime.h #ifndef _GET_TIME_H_ #define _GET_TIME_H_ void PrintCurrentTime(); #endif //gettime.c #include <stdio.