android向联系人中添加头像以及获得电话记录

Java代码

 

<pre name="code" class="java">ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, "DISPLAY_NAME = '" + "gm" + "'", null,
                null);
if (cursor.moveToFirst()) {
//获得联系人的id            
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

//修改联系人的头像
Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img2);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
sourceBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
byte[] avatar =os.toByteArray();
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, contactId);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
values.put(Photo.PHOTO, avatar);
getContentResolver().update(Data.CONTENT_URI, values, null, null);</pre>

 

构建uri

Java代码

Uri contactUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI,
Long.parseLong(contactId));
//带路径
Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.DATA15);

 此uri为content://com.android.contacts/contactId/data15

 

获得联系人图片

Java代码

// 获得联系人图片,        读取的是Data类中的data15字段
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
 Long.parseLong(contactId)); InputStream input =
 ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
 Bitmap contactPhoto = BitmapFactory.decodeStream(input);
 ImageView img=(ImageView)findViewById(R.id.img);
 img.setImageBitmap(contactPhoto);

 

 查询电话记录

Java代码

// 查询所有
// Cursor cursor=resolver.query(CallLog.Calls.CONTENT_URI, null,
        // null,null, null);
// 查询指定号码
Cursor cursor=resolver.query(CallLog.Calls.CONTENT_URI, null,
          "number=? and type=?", new String[]{"15555215556","2"}, null);
 while(cursor.moveToNext()){ //取得联系人名字 PhoneLookup.DISPLAY_NAME int nameFieldColumnIndex
         =cursor.getColumnIndex(CallLog.Calls.CACHED_NAME); String
    contact=cursor.getString(nameFieldColumnIndex);
//取得电话号码
 int numberFieldColumnIndex=cursor.getColumnIndex(PhoneLookup.NUMBER);
 String number=cursor.getString(numberFieldColumnIndex);

 

取得浏览器所有“书签”信息:content://browser/bookmarks

数据都存储在contract的data表中,每一个联系人项存储一行

另有两篇:一篇讲解contentProvider

http://www.cnblogs.com/not-code/archive/2011/06/24.html

另一篇讲解联系人

http://blog.csdn.net/wenlin56/article/details/6074437

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值