两天多来,我试图从内部地址簿(没有 facebook-、gmail- 或 twitter 联系人)中获取所有联系人的列表,以及他们的家人和名字。
我设法获得了一个包含所有联系人的列表,包括社交联系人。所以我查看了 account_types 并在我的 HTC Desire 上看到所有内部地址簿联系人都来自“com.htc.android.pcsc”,我就像“太好了,我只需要过滤整个列表”。但是,如果我硬编码这个过滤器,那么所有使用非 htc android 手机的人都将无法使用我的应用程序。
下一个想法是让用户选择他想使用的帐户,但不幸的是“com.htc.android.pcsc”没有出现在我从 AccountManager 获得的列表中?!?
所以我的问题是:是否有任何标准化的方式来访问内部通讯录?我真的坚持这一点,任何提示都非常感谢!
/edit:也许我没有让自己足够清楚。我可以通过 ContactsContract API 获取联系人列表:
ArrayList phoneContacts = new ArrayList();
String[] projection = new String[] {
Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME
};
String selection = Data.MIMETYPE+" = '"+ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE+"'";
Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null);
while (cursor.moveToNext()) {
phoneContacts.add(...);
}
cursor.close();
但是后来我有来自所有不同帐户类型的联系人,例如 com.google / com.htc.socialnetwoork.facebook 等。
我的问题是:如何过滤掉所有这些社交网络和 gmail 联系人,所以我有一个联系人列表,这些联系人仅来自我的内部通讯录?
/edit2:我找到了一个描述我遇到的同样困难的例子:http: //forum.synthesis.ch/showthread.php?t =2057 Synthesis AG 的 SyncML 有同样的问题,人们抱怨他们不能仅通过 gmail、facebook 等与他们的内部地址簿/电话簿同步。但他们设法将内部地址簿与所有其他帐户类型分开。所以必须有办法解决这个问题,但我不知道如何。请帮忙!