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-запрос, чтобы получить номер телефона.

Другие вопросы по тегам