安卓和Facebook联系人选择器问题

3
我的问题简述如下:如何访问从第三方应用程序同步的联系人电话号码?
以下是详细说明:
我可以很容易地访问常规的Android联系人。问题在于当联系人列表中的唯一信息与Facebook或LinkedIn等第三方应用程序同步时。如果我手动输入某人的电话号码到Google联系人列表中,一切都运作正常。
然而,如果这个电话号码来自将我的Facebook帐户同步到我的联系人列表中,则不会显示任何电话号码,即使如果我导航到谷歌预制的联系人列表,我也可以看到电话号码实际上已经附加到了联系人。以下是我用于获取电话号码的代码。
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的名称。因此我知道可以选择的所有联系人都有附加的电话号码。

如果您想仅显示那些具有谷歌电话号码的联系人,请查看我在这里的答案:http://stackoverflow.com/a/11726920/813029 - Richard Laughlin
2个回答

1

Facebook没有包含在ContactPicker中,因为Facebook禁止这样做。 这是一个政治问题,不会很快得到解决:Google希望Facebook分享数据,Facebook使用Google但不分享。


我在某个地方读到过这个,所以听起来很熟悉。只是我不知道它是否适用于我的特定情况。那么,如何筛选出属于这个类别的联系人呢?我在原始帖子中只简要提到了这一点,但我使用HAS_PHONE_NUMBER标志来确定是否应该首先在联系人中列出名称。这意味着我的大部分Facebook联系人不应该被列为可选择的选项,因为我拥有的电话号码来自Facebook。除了HAS_PHONE_NUMBER标志之外,还有其他更好的方法吗? - Lucas Bailey
因此浪费了一个下午折腾联系人选择器! - Sam

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接