如果联系人有连接,例如Whatsapp或Skype,并且该联系人没有照片,则会显示Whatsapp或Skype照片。
如果联系人照片没有照片,如何获取连接照片?
public byte[] getPhoto(String contactId) {
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId));
Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
try
{
Cursor c = getContentResolver().query(photoUri,
new String[] {ContactsContract.Contacts.Photo.PHOTO}, null, null, null);
try {
if (c.moveToFirst()) {
final byte[] image = c.getBlob(0);
final Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
c.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return new byte[0];
}
解决
此方法可正常工作。问题出在该计划的另一部分。很抱歉给您带来不便,谢谢大家。
答案 0 :(得分:1)
首先,请注意Whatsapp
应用中没有显示Contacts
照片,它只会显示在Whatsapp
应用中,因为它是Whatsapp
本地存储的专有照片1}}应用,第三方应用无法访问。
我不确定Skype
,但如果您确实在Contacts
应用中看到了一张照片,则应该可以通过API访问它。
您发布的代码访问了该联系人的缩略图大小的照片,该联系人可能只有高分辨率照片而且没有缩略图。
使用ContactsContract.DisplayPhoto尝试此代码:
public InputStream openDisplayPhoto(long photoFileId) {
Uri displayPhotoUri = ContentUris.withAppendedId(DisplayPhoto.CONTENT_URI, photoKey);
try {
AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(
displayPhotoUri, "r");
return fd.createInputStream();
} catch (IOException e) {
return null;
}
}
此外,此代码会显示为联系人存储的所有照片及其RawContact
ID来源:
String[] projection = new String[] { CommonDataKinds.Photo.PHOTO_FILE_ID, CommonDataKinds.Photo.PHOTO, CommonDataKinds.Photo.RAW_CONTACT_ID };
String selection = Data.MIMETYPE + "='" + CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "' AND " + Data.CONTACT_ID + "=" + contactId;
Cursor c = resolver.query(Data.CONTENT_URI, projection, selection, null, null);
while (c != null && c.moveToNext()) {
Long photoId = c.getLong(0);
boolean hasPhoto = c.isNull(1);
Long rawContactId = c.getLong(2);
Log.d(TAG, "found photo: " + photoId + ", " + rawContactId + ", " + hasPhoto);
}