【问题标题】:Android set contact's photo with ContactsContractAndroid 使用 ContactsContract 设置联系人的照片
【发布时间】:2015-03-03 21:10:17
【问题描述】:

我正在寻找一种使用给定位图图像以编程方式更新联系人照片的方法。我正在执行以下操作,但没有任何反应。既没有设置图片也没有发生错误。

Cursor cursor = provider.query(ContactsContract.RawContacts.CONTENT_URI,
                new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.ACCOUNT_TYPE},
                ContactsContract.RawContacts.ACCOUNT_TYPE +"=?",
                new String[]{accountType},
                null);

        // Only one entry
        if(cursor.moveToFirst())
        {
            id = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(CompressFormat.JPEG, 100, stream);
        byte[] bytes = stream.toByteArray();

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                .withValueBackReference(Data.RAW_CONTACT_ID, Integer.parseInt(id))
                .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
                .withValue(Photo.PHOTO, bytes)
                .build());
    }
    provider.applyBatch(ops);

图像从 REST api 加载,似乎可以正常工作,因为字节对象实际上是下载图像的大小。

【问题讨论】:

    标签: android contactscontract


    【解决方案1】:

    您的代码将照片数据行连接到特定的原始联系人,但它不会启动任何会更改该原始联系人和相应联系人的显示照片的程序。

    使用ContactsContract.RawContacts.DisplayPhoto 进行强制原始联系人显示照片编辑。文档中有很好的用法示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      相关资源
      最近更新 更多