列出Android中的所有Google联系人群组

1 sdk android

我想在Google帐户中列出所有联系人群组,并使用户可以选择某些群组作为"特殊"群组.当传入号码属于"特殊"组之一时,我想采取行动.

我找不到太多关于此的例子.有人做过你想分享的类似事吗?

Tre*_*hns 5

你有三个问题:

  1. 如何枚举给定帐户的联系人组.
  2. 如何将组标记为特殊组.
  3. 如何对该组中的联系人采取措施.

所以,从列表中走下去......

1.列举联系人组

ContactsContract.Groups表存储联系人组的系统列表中.因此,您需要发出如下所示的查询:

public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
    Uri uri = ContactsContract.Groups.CONTENT_URI;
    Log.i(TAG, "URI: " + uri);
    String[] projection = new String[] {
           ContactsContract.Groups._ID,
           ContactsContract.Groups.TITLE
    };
    return new CursorLoader(this, uri, projection, null, null, null);
}
Run Code Online (Sandbox Code Playgroud)

此加载程序将为您提供系统上所有组的列表及其数据库ID.

如何将组标记为特殊组

这是您的应用程序需要处理的事情.只需维护特殊列表中的组ID列表即可.

要确定联系人是否在"特殊"组中,可以使用如下的SQL 子句查询ContactsContract.Datawhere:

String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
        + "="
        + groupid
        + " AND "
        + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE
        + "='"
        + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
        + "'";
Run Code Online (Sandbox Code Playgroud)

groupid您标记为特殊的组的数据库ID 在哪里.(如果您有多个组,请开始添加OR子句.)

(您需要检查CONTENT_ITEM_TYPE mimetype,因为ContactsContract.Data表用于存储联系人的任意元数据,并且该表中列的含义因mimetype而异.GroupMembership.GROUP_ROW_ID只是指向列的指针data1.)

3.如何对该组中的联系人采取行动

这取决于你想要完成的任务,但总的来说,你将创建一个倾听的广播接收器android.intent.action.PHONE_STATE.如果状态TelephonyManager.EXTRA_STATE列为TelephonyManager.EXTRA_STATE_RINGING,则您可以通过查找电话号码来获取TelephonyManager.EXTRA_INCOMING_NUMBER电话号码.

(本文附带的示例代码:http://www.krvarma.com/2010/08/detecting-incoming-and-outgoing-calls-in-android/)

然后,您需要再次检查"联系人"数据库​​,以查找具有该电话号码的任何已知联系人.您可以使用ContactsContract.PhoneLookup表执行此操作.

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
Run Code Online (Sandbox Code Playgroud)

这将获得ContactsContract.Contacts表中的Contact的数据库ID .这里的最后一步是将其与该ContactsContract.RawContacts联系人的行匹配(使用CONTACT_ID列搜索),并找到表示该联系人的RawContacts _ID集.然后,您将使用它来搜索组成员资格表,如上所述.