您的位置:首页 > 其它

实现一个简单的拨号器程序

2015-05-01 14:40 274 查看
程序大体完成,上传至github:https://github.com/wylhyz/Dialpanel

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

void search(){
ContentResolver cr = getContentResolver();

String[] projection = new String[]{
ContactsContract.Contacts._ID
};

Cursor idCursor = cr.query(ContactsContract.Contacts.CONTENT_URI,projection,null,null,null);

String id;
while(idCursor.moveToNext()){
int idIdx =  idCursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID);
id=idCursor.getString(idIdx);
printContacts(id);
}

idCursor.close();
}

void printContacts(String id){
if(id!=null){
String where = ContactsContract.Data.CONTACT_ID+" = "+id +" AND "+ ContactsContract.Data.MIMETYPE+" = '"+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE+"'";

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

Cursor dataCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,projection,where,null,null);

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

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

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

dataCursor.close();

for(String item : result){
Log.i("TAG",item);
}
}
}


以上代码来自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));


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

程序大体完成,上传至github:https://github.com/wylhyz/Dialpanel
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: