当从谷歌服务获得(同步)联系人时,我无法向联系人添加照片

时间:2014-01-18 10:40:17

标签: android photo contact synchronized

我必须将照片添加到联系方式(见下文)。它仅在我的设备上创建联系人时起作用。当从谷歌服务获得(同步)联系时它不起作用。我在运行时没有任何错误。 我的设备正在使用 Android 4.1.1

第一种方式(来自http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html):

public static void writeDisplayPhoto(ContentResolver c, Bitmap contactPhoto, long personId) {
    // control args
    if ((contactPhoto == null)||(c==null)||(personId==0l)) {
        return;
    }
    // convert bitmap to byte
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    contactPhoto.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
    byte[] photo = bos.toByteArray();
    Log.i("CallWidgetConfig::writeDisplayPhoto()","personId: "+personId);
    // set tpoto to contact
    Uri rawContactPhotoUri = Uri.withAppendedPath(
            ContentUris.withAppendedId(RawContacts.CONTENT_URI, personId),
            RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
    try {
        AssetFileDescriptor fd =
            c.openAssetFileDescriptor(rawContactPhotoUri, "rw");
        OutputStream os = fd.createOutputStream();
        os.write(photo);
        os.close();
        fd.close();
    } catch (Exception e) {
        Log.i("CallWidgetConfig::writeDisplayPhoto()",e.getMessage());
    }
}

第二种方式:

public static void setContactPhoto(ContentResolver c, Bitmap contactPhoto, long personId) {
    if ((contactPhoto == null)||(c==null)||(personId==0l)) {
        return;
    }
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    contactPhoto.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
    byte[] bytes = bos.toByteArray();
    int photoRow = -1;
    String where = Data.RAW_CONTACT_ID + " = " + personId + " AND "
            + Data.MIMETYPE + "=='" + Photo.CONTENT_ITEM_TYPE
            + "'";
    Cursor cursor = null;
    try {
        cursor = c.query(Data.CONTENT_URI, null, where, null, null);
        int idIdx = cursor.getColumnIndexOrThrow(Data._ID);
        if (cursor.moveToFirst()) {
            photoRow = cursor.getInt(idIdx);
            Log.i("CallWidgetConfig::setContactPhoto()","photoRow: "+photoRow);
        }
    } 
    catch (Exception e) {
        Log.i("CallWidgetConfig::setContactPhoto()",e.getMessage());
        if (cursor!=null) {
            cursor.close();
        }
        return;
    }
    ContentValues values = new ContentValues();
    values.put(Data.RAW_CONTACT_ID, personId);
    values.put(Data.IS_SUPER_PRIMARY, 1);
    values.put(Photo.PHOTO, bytes);
    values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
    if (photoRow >= 0) {
        Log.i("CallWidgetConfig::setContactPhoto()","Update()");
        c.update(Data.CONTENT_URI, values, Data._ID + " = " + photoRow, null);
    } else {
        Log.i("CallWidgetConfig::setContactPhoto()","Insert()");
        c.insert(Data.CONTENT_URI, values);
    }
    cursor.close();
}

0 个答案:

没有答案