Android和Facebook联系人选取器发行人

Android和Facebook联系人选取器发行人,android,contactscontract,Android,Contactscontract,我的问题的简短版本是:如何访问从第三方应用程序同步的联系人的电话号码 以下是长版本: 我可以很容易地访问常规Android联系人。问题在于联系人列表中的唯一信息与第三方应用程序(如Facebook或LinkedIn)同步。如果我亲自去谷歌联系人列表中输入某人的电话号码,一切正常 但是,如果这个电话号码来自于将我的facebook帐户同步到我的联系人列表,则不会显示任何电话号码,即使我导航到谷歌预先制作的联系人列表,我可以看到一个电话号码实际上附加在联系人上。这是我用来获取电话号码的代码 publ

我的问题的简短版本是:如何访问从第三方应用程序同步的联系人的电话号码

以下是长版本:

我可以很容易地访问常规Android联系人。问题在于联系人列表中的唯一信息与第三方应用程序(如Facebook或LinkedIn)同步。如果我亲自去谷歌联系人列表中输入某人的电话号码,一切正常

但是,如果这个电话号码来自于将我的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函数获取所单击的实际名称,获取该名称的查找键,然后获取与该查找键关联的所有电话号码


哦,与此相关,联系人列表中显示的唯一姓名是Contacts contract.Contacts.HAS_PHONE_NUMBER等于1的姓名。因此,我知道所有可以选择的联系人都附有电话号码。

联系人选择器中不包括Facebook,因为Facebook禁止这样做。
这是一个政治问题,不会很快解决:谷歌希望Facebook共享数据,Facebook使用谷歌但不共享..

你必须使用。使用。

我在某个地方读到过,所以听起来很熟悉。我只是不知道它适用于我的特定场景。那么,我如何筛选出属于这一类别的联系人呢?我在最初的帖子中只是简单地提到了这一点,但我使用HAS_PHONE_NUMBER标志来确定是否应该首先在联系人中列出该姓名。这意味着我的大部分facebook联系人都不应该被列为可选选项,因为我的电话号码来自facebook。除了“有电话号码”标志外,还有什么更好的办法吗?浪费了一个下午的时间和联系人选取者混在一起,就是因为这个!如果您只想显示那些有谷歌电话号码的联系人,请在此处查看我的答案: