Android: прикрепить изображение к контакту - PullRequest
0 голосов
/ 29 июля 2011
    Bitmap bmp = BitmapFactory.decodeFile("/sdcard/abc.jpg");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 75, stream);   ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    int photoId = -1;
    Cursor cursor = c.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID
            + " = " + id, null, null);
    int idIdx = cursor.getColumnIndexOrThrow(Photo.PHOTO_ID);
    System.out.println("cursor counts------------------"
            + cursor.getCount());

    System.out.println(Photo.PHOTO.equals(Photo.DATA15));

    if (cursor.moveToFirst())
    {
        photoId = cursor.getInt(idIdx);
        System.out.print("photo id-------------" + photoId);
    }
    cursor.close();

    if (photoId > 0)
    {
        System.out.println("do update");
        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                .withSelection(Data._ID + "=?", new String[]
                    { String.valueOf(photoId) })
                .withValue(Data.RAW_CONTACT_ID, id)
                .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
                .withValue(Photo.PHOTO, bytes).build());
    }
    else
    {
        System.out.println("do insert");
        ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
                .withValue(Data.RAW_CONTACT_ID, id)
                .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
                .withValue(Photo.PHOTO, bytes).build());
    }
    c.applyBatch(ContactsContract.AUTHORITY, ops);

Я использовал приведенные выше коды для вставки или обновления изображения контакта, однако, когда я прикрепил изображение к контакту, изображение можно увидеть только в списке контактов. Если перейти к операции с контактной информацией, я не смогу см. изображение. И иногда изображение будет прикреплено к другому контакту вместо указанного контакта (указывается по id). Любая помощь приветствуется! :))

1 Ответ

1 голос
/ 05 апреля 2012

Вначале, благодаря вашему вопросу, я понял свою проблему, получив от нее какое-то просветление. И моя проблема в том, как добавить картинку в контакт. Я делаю это следующим образом

public void testInsert() {
      ContentValues values = new ContentValues();
      Uri rawContactUri = this.getContext().getContentResolver()
                .insert(RawContacts.CONTENT_URI, values);
      long rawContactId = ContentUris.parseId(rawContactUri);
               //insert picture
      Bitmap bmp = BitmapFactory.decodeFile("/sdcard/abc.jpg");
      ByteArrayOutputStream stream = new ByteArrayOutputStream();
      bmp.compress(Bitmap.CompressFormat.JPEG, 75, stream);
      values.clear();
      values.put(Data.RAW_CONTACT_ID, rawContactId);
      values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
      values.put(Photo.PHOTO, stream.toByteArray());
      this.getContext()
                .getContentResolver()
                .insert(android.provider.ContactsContract.Data.CONTENT_URI,
                        values);

МойАнглийский не достаточно хорош, чтобы понять все ваши слова. И мои коды могут просто вставить указанное изображение в контакт, надеюсь, это поможет вам. Еще раз спасибо, ваша проблема мне очень помогает.

...