Android从data.Email查询获取联系人照片

我正在创建一个自动填充字段,通过显示名称和电子邮件查询联系人.当有人在过滤后点击所需的联系人时,将该联系人添加到带有他的电子邮件的列表中,显示名称和图片(如果他有).

所以到目前为止我已经设法做了所有事情,除了让照片出现.以下是我如何运行查询以获取电子邮件,显示名称,ID和照片ID.

    return mContent.query(Email.CONTENT_URI,
              PROJECTION, filter, null, null);

投影的地方是:

 PROJECTION = new String[] {ContactsContract.Contacts._ID,
              ContactsContract.Contacts.DISPLAY_NAME,
              ContactsContract.Contacts.PHOTO_ID,
                Email.DATA
            };

这个做我需要的并返回所有数据.但是我在调​​试此问题时注意到的一件事是联系人ID与例如针对特定显示名称对ContactsContract.Contacts.CONTENT_URI运行查询时的联系ID不同.

例如我运行的测试我通过运行Contacts.CONTENT_URI获得了所有联系人.我给了一个图像联系人,ID为152.但是对于同一联系人,对Email.CONTENT_URI的查询给了我一个452的id(使用相同的显示名称和电子邮件地址).因此,当我试图获取包含Id 452的内容uri的照片时,它返回该照片不存在,但如果我尝试获取152的照片它完美地工作.

是什么导致了这个问题?我如何获得正确的用户名?是否有任何关系查询,我可以运行以获取联系人ID,或者可能是在这个问题的帮助下获得它的正确方法.

谢谢.

编辑

我发现这是围绕旧代码挖掘的.可能对任何人都有帮助.

所以完整的查询:

String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_ID,
            Email.DATA, ContactsContract.CommonDataKinds.Photo.CONTACT_ID };

                String order = " CASE WHEN " + ContactsContract.Contacts.DISPLAY_NAME
                        + " NOT LIKE '%@%' THEN 1" + " ELSE 2 END, "
                        + ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE";
                String filter = Email.DATA + " NOT LIKE '' ) GROUP BY ( " + Email.DATA;

那么它

getContentResolver().query(Email.CONTENT_URI,PROJECTION,filter,null,order);

解决方法:

如果要访问联系人的照片,则需要指定联系人照片URI,例如使用以下方法:

public Uri getContactPhotoUri(long contactId) {
    Uri photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
    photoUri = Uri.withAppendedPath(photoUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
    return photoUri;
}

但对于contactId,您必须使用:

String id = ContactsContract.CommonDataKinds.Photo.CONTACT_ID;
long contactId = Long.parseLong(id);

请注意,常见错误是使用ContactsContract.Contacts._ID而不是ContactsContract.CommonDataKinds.Photo.CONTACT_ID

我希望能帮助你.

上一篇:fcpx插件 10组创意图像拼接排版LOGO标志展示片头 Abstract Photo Opener


下一篇:PHP – 通过Graph API将网络托管的照片上传到Facebook相册