#java #android #eclipse #android-contentresolver
#java #Android #eclipse #android-contentresolver
Вопрос:
У меня есть приложение, которому необходимо получить фотографию данного контакта. У меня есть номер телефона контакта, так есть ли способ получить фотографию контакта, если она существует, по номеру телефона через ContentResolver или любую другую форму? Я искал, но не нашел ответов.
Я действительно хотел бы подчеркнуть важность использования номера телефона для получения фотографии контакта, если она существует. Спасибо.
Ответ №1:
Хорошо, я наконец-то разобрался, как добавлять фотографии facebook. Этот метод добавит нужные вам фотографии Facebook по номеру телефона:
public Bitmap getFacebookPhoto(String phoneNumber) {
Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Uri photoUri = null;
ContentResolver cr = this.getContentResolver();
Cursor contact = cr.query(phoneUri,
new String[] { ContactsContract.Contacts._ID }, null, null, null);
if (contact.moveToFirst()) {
long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID));
photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId);
}
else {
Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image);
return defaultPhoto;
}
if (photoUri != null) {
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(
cr, photoUri);
if (input != null) {
return BitmapFactory.decodeStream(input);
}
} else {
Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image);
return defaultPhoto;
}
Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image);
return defaultPhoto;
}
Комментарии:
1. Подбадривает ROFLwTIME, я перепробовал много ссылок, но не смог найти ничего подходящего, но ваш пост сорвал джекпот
Ответ №2:
Я не думаю, что есть простой способ сделать это. Но я думаю, вы можете просмотреть контакты на телефоне и проверить каждый номер, если это тот, который вы пытаетесь сопоставить.
Поскольку номера в любом случае неупорядочены, нет способа сделать это более эффективным. Поиск в неупорядоченном списке выполняется путем обхода их, как я предлагаю вам поступить с этой проблемой. Если Android не хранит все номера в упорядоченном списке, о котором я не знаю.
Вы можете перемещаться по контактам, делая что-то вроде этого:
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(
ContactsContract.Contacts._ID));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Boolean.parseBoolean(hasPhone)) {
// You know it has a number so now query it like this
Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID " = " contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
}
cursor.close();
Это не полное решение вашей задачи, но, изменив приведенный выше код, я думаю, вы справитесь. 🙂