Android и Facebook: средство выбора контактов
Краткая версия моего вопроса: как получить доступ к телефонным номерам контактов, которые были синхронизированы из сторонних приложений?
Вот длинная версия:
Я могу легко получить доступ к обычным контактам Android. Проблема в том, что единственная информация в списке контактов синхронизируется со сторонним приложением, таким как Facebook или LinkedIn. Если я физически пошел и набрал чей-то номер телефона в списке контактов Google, все работает нормально.
Однако, если этот номер телефона был получен в результате синхронизации моей учетной записи Facebook с моим списком контактов, номер телефона не отображается, хотя, если я перешел к предварительно созданному списку контактов Google, я вижу, что номер телефона действительно прикреплен к контакту. Вот код, который я использую для получения телефонных номеров.
public void populateNumberLists(View view)
{
LinearLayout ll = (LinearLayout) view;
TextView tv = (TextView) ll.findViewById(R.id.contactEntryText);
String str = (String) tv.getText();
Cursor cursor = getNumbers(str);
String[] fields = new String[] {
cursor.getColumnName(1).toString()
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.numberentry, cursor,
fields, new int[] {R.id.numberEntryText});
mNumberList.setAdapter(adapter);
}
private Cursor getNumbers(String str)
{
final Uri URIs = ContactsContract.Contacts.CONTENT_URI;
final String ID = ContactsContract.Contacts.LOOKUP_KEY;
String id = "";
ContentResolver cr = getContentResolver();
Cursor cu = cr.query(URIs, null, ContactsContract.Contacts.DISPLAY_NAME + " = '" + str + "'", null, null);
if (cu.moveToFirst()) {
id = cu.getString(cu.getColumnIndex(ID));
}
cu.close();
// Run query
Uri uri = Phone.CONTENT_URI;
String[] projection = new String[] {
Phone._ID,
Phone.NUMBER
};
String selection = Phone.LOOKUP_KEY + " = '" + id + "' and (" + Phone.TYPE + " = '" + Phone.TYPE_HOME+"' or " + Phone.TYPE + " = '" + Phone.TYPE_MOBILE+"' or " + Phone.TYPE + " = '" + Phone.TYPE_WORK+"' or " + Phone.TYPE + " = '" + Phone.TYPE_WORK_MOBILE+"')";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, null);
}
По сути, функция populateNumberLists берет выбранный элемент из представления списка, определяет, какой контакт из списка был выбран, и вызывает функцию getNumbers.
Функция getNumbers берет фактическое имя, по которому щелкнули, получает ключ поиска для этого имени, а затем захватывает все телефонные номера, связанные с этим ключом поиска.
О, в связи с этим в списке контактов отображаются только имена, в которых ContactsContract.Contacts.HAS_PHONE_NUMBER равен 1. Поэтому я знаю, что ко всем контактам, которые можно выбрать, прикреплен номер телефона.
2 ответа
Facebook не включен в ContactPicker, потому что Facebook запрещает это. Это политическая вещь, и скоро она не будет решена: Google хочет, чтобы Facebook делился данными, Facebook использует Google, но не делится..
Вы должны будете использовать Facebook SDK для Android, чтобы сделать это. Используйте FQL-запрос, чтобы получить номер телефона.