android - 从自己的应用程序创建新的联系人照片

时间:2012-02-08 16:32:59

标签: android android-intent contact

我想通过意图从我自己的应用程序打开本机联系人编辑器,我将数据与意图放在一起(使用putExtra函数)。 我使用ContactsContract.Intents.Insert将数据传递给Native联系人。我可以传递所有联系人数据(地址,姓名,号码等),但不能传递联系人照片。

我该怎么做(传递实际的数据字节或网址)? 感谢

1 个答案:

答案 0 :(得分:0)

以下是您可以尝试的代码段:

public static void setContactPhoto(ContentResolver c,
                                   byte[] bytes,
                                   long personId) {
  ContentValues values = new ContentValues();
  int photoRow = -1;
  String where = ContactsContract.Data.RAW_CONTACT_ID + " = "
    + personId + " AND " + ContactsContract.Data.MIMETYPE
    + "=='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
  Cursor cursor = c.query(ContactsContract.Data.CONTENT_URI,
                          null, where,
                          null, null);
  int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID);
  if (cursor.moveToFirst()) {
    photoRow = cursor.getInt(idIdx);
  }
  cursor.close();

  values.put(ContactsContract.Data.RAW_CONTACT_ID, personId);
  values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
  values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes);
  values.put(ContactsContract.Data.MIMETYPE,
             ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);

  if (photoRow >= 0) {
    c.update(ContactsContract.Data.CONTENT_URI, values,
             ContactsContract.Data._ID + " = " + photoRow, null);
  } else {
    c.insert(ContactsContract.Data.CONTENT_URI, values);
  }
}

您可以阅读该文章的source中的所有详细信息。