码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-01 15:59:10      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

为了在拨号的时候能够实时显示所有可能匹配的联系人(实际上没什么用,如果记住了号码那比去通讯录中找要快多了),首先写出一个获取系统的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显示出来。

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

标签:

原文地址:http://www.cnblogs.com/lhyz/p/4470632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!