我的问题的简短版本是:如何访问从第三方应用同步的联系人的电话号码?
这是长版:
我可以非常轻松地访问常规的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的名称。所以我知道所有可以选择的联系人都附有电话号码。
答案 0 :(得分:1)
Facebook未包含在ContactPicker中,因为Facebook禁止这样做。 这是一个政治问题,不会很快得到解决:谷歌希望Facebook分享数据,Facebook使用谷歌但不分享..
答案 1 :(得分:1)
您必须使用Facebook SDK for android来执行此操作。使用FQL query to get the phone number。