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

标签 android sdk

我想列出 Google 帐户中的所有联系人组,并使用户可以选择某些组作为“特殊”组。当来电号码属于“特殊”群体之一时,我想采取行动。

我找不到太多关于此的示例。有人做过类似的事情吗?

最佳答案

你在这里有三个问题:

  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);
}

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

如何将群组标记为特殊群组

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

要确定联系人是否在“特殊”组中,您可以查询 ContactsContract.Data使用 SQL where 子句的表,如下所示:

String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
        + "="
        + groupid
        + " AND "
        + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE
        + "='"
        + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
        + "'";

其中 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,...

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

关于android - 列出 Android 中的所有 Google 联系人组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638821/

相关文章:

android - 如何在 Android SDK Manager 上使用 tor

android - Android 手机上的 Gmail 同步

JavaScript 异常在 Promise 链中丢失

java - 使用 python 的 Android 应用程序

java - OpenJDK 和 Adoptium/AdoptOpenJDK 的区别

c - 如何规避 Windows 通用 CRT header 对 vcruntime.h 的依赖

javascript - 忽略 Android React Native 上的 SSL 证书检查

java - 有没有办法在具有同一 sdk 的多个版本的项目中导入特定版本的 java sdk?

Android SDK 单击按钮时更改文本

android - LinearLayout@422725b0 不是滑动抽屉