У меня проблема при вставке или обновлении изображения контакта. Кажется, что Android сжал изображение.
Для тестирования я создал PNG с размером 200 x 200 пикселей и сохранил его во внутреннем хранилище приложения.
Размер байта [] равен 52490.
Но размер изображения контакта (высокое разрешение) всегда составляет 6767 байтов.
Проверено на HT C U11 (Android 9) и Sony Xperia (Android 8)
Чтение изображения из внутренней памяти:
byte[] readPicture(String filename) {
FileInputStream in = null;
byte[] result = null;
try {
in = context.openFileInput(filename);
result = new byte[in.available()];
int read = in.read(result);
Log.d("FileUtil", read + " bytes read from " + filename);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeStream(in);
}
return result;
}
Вставьте картинку в конкретный c контакт:
picture = readPicture(filename);
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withYieldAllowed(true);
builder.withValue(ContactsContract.Data.CONTACT_ID, contactId);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, picture);
ops.add(builder.build());
Загрузите полноразмерное изображение контакта:
// contact.getContactId() == ContactsContract.Data.CONTACT_ID
// contact.getLookup() == ContactsContract.Data.LOOKUP_KEY
ContactsContract.Contacts.getLookupUri(Long.parseLong(contact.getContactId()), contact.getLookup());
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri, true);
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] result = null;
if (is != null) {
byte[] buffer = new byte[4096];
int length;
try {
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
result = os.toByteArray();
} catch (Exception ignored) {
return null;
} finally {
FileUtil.closeStream(is);
FileUtil.closeStream(os);
}
}
return result;
Я думаю, что делаю что-то не так, но у меня не знаю что.