【问题标题】:Android and Facebook Contact Picker IssuerAndroid 和 Facebook 联系人选择器发行者
【发布时间】:2011-11-15 14:38:10
【问题描述】:

我的问题的简短版本是:如何访问从 3rd 方应用同步的联系人的电话号码?

这里是长版:

我可以很容易地访问常规的 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 的名称。所以我知道所有可以选择的联系人都附有电话号码。

【问题讨论】:

标签: android contactscontract


【解决方案1】:

Facebook 不包含在 ContactPicker 中,因为 Facebook 禁止这样做。 这是一个政治问题,不会很快解决:谷歌希望 Facebook 共享数据,Facebook 使用谷歌但不共享..

【讨论】:

  • 我在某处读到过,所以听起来很熟悉。我只是不知道它适用于我的特定场景。那么,如何过滤掉属于此类别的联系人?我在原始帖子中仅简要提到了这一点,但我使用 HAS_PHONE_NUMBER 标志来确定是否应首先在联系人中列出该姓名。这意味着我的大部分 facebook 联系人不应列为可选选项,因为我的电话号码来自 facebook。除了 HAS_PHONE_NUMBER 标志之外,还有其他更好的方法吗?
  • 浪费了一个下午与联系人选择器混为一谈!
【解决方案2】:

您必须使用Facebook SDK for android 来执行此操作。使用FQL query to get the phone number

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多