【发布时间】:2010-12-27 19:12:12
【问题描述】:
两天多来,我一直在尝试从内部通讯录(没有 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 等同步其内部地址簿/电话簿。 但是他们设法将内部地址簿与所有其他帐户类型分开。所以必须有办法解决这个问题,但我不知道如何。请帮忙!
【问题讨论】: