修改联系信息

2024-03-31

我正在尝试插入和更新一条信息existing联系,因此我创建了一个示例应用程序来开发该功能。我希望示例应用程序做的就是插入(或如果存在)更新联系人的电子邮件地址。

我通过系统意图选择联系人,如下所示:

    startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);

返回的 URI 是Contact (RawContact?)被选择并以这种形式出现:content://com.android.contacts/contacts/lookup/0r2-2A90214945/2.

我可以拉回所有Data (RawContact?)通过执行以下代码来解决此问题:

Cursor cursor = contentResolver.query(mContactUri, null, null, null, null);
try {
    if (cursor.moveToFirst()) {
        for(int i=0; i < cursor.getColumnCount(); i++) {
            String message = cursor.getColumnName(i);
            Log.v("", message);
        }
    }
} finally {
    cursor.close();
}

由此我应该能够确定联系人是否已经有通用数据类型.电子邮件 http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html Data member:

cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;

然后执行以下操作之一Insert or Update the Data http://developer.android.com/reference/android/provider/ContactsContract.Data.html:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newInsert(mContactUri)
    .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
    .withValue(Email.DISPLAY_NAME, "[email protected] /cdn-cgi/l/email-protection")
    .withValue(Email.TYPE, Email.TYPE_HOME)
    .build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

但这给了我一个例外:java.lang.UnsupportedOperationException: URI: content://com.android.contacts/contacts/lookup/0r2-2A90314945/2, calling user:

希望有人能看到我错过了什么。

PS,我正在使用这些权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

Android用户需要更新他们的文档 http://developer.android.com/resources/articles/contacts.html。它实际上让我知道less关于正在发生的事情比我通过猜测得到的更多。它建议您可以拉回Contact,其中将包含许多RawContacts其中将包含Data.

这种解释是完全错误的。 ContactContracts 数据是三个正常的平均日常数据库表*:

联系方式合同表

Table: Contacts http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html

访问URI:Contacts.CONTENT_URI

首要的关键**:Data._ID

描述:

该表包含有关联系人的信息(添加时间、用户图标是什么、是否有自定义铃声)。

关系:与 是一对多的关系RawContact table.

Table: 原始联系人 http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

访问URI:RawContacts.CONTENT_URI

首要的关键:Data._ID

外键**:Data.CONTACT_ID

描述:

该表包含有关一组相关数据项的信息。 RawContact 可以包含电子邮件类型、电子邮件显示名称、电话号码、电话显示名称等。RawContact 可以与其他 RawContact 聚合以生成Contact正如用户所见。一个联系人只能包含一个 RawContact。

关系:与 是一对多的关系Data table.

Table: Data http://developer.android.com/reference/android/provider/ContactsContract.Data.html

访问URI:Data.CONTENT_URI

首要的关键:Data._ID

外键:Data.RAW_CONTACT_ID

描述:

该表包含单个信息字段。电子邮件地址、电话号码、电话号码类型(家庭/工作)、昵称、显示名称。

在回答问题时

我已将整个示例项目上传到 GitHub,以便其他人了解如何使用 ContactContract 查询、更新和插入记录。

您可以在这里找到要下载的项目:https://github.com/gwoodhouse/ContactContractSample https://github.com/gwoodhouse/ContactContractSample

如果您只想查看执行查询/更新/插入的 java 代码,这里是类文件:https://github.com/gwoodhouse/ContactContractSample/blob/master/ContactsIntegration/src/com/woodhouse/example/activity/ContactsIntegrationActivity.java https://github.com/gwoodhouse/ContactContractSample/blob/master/ContactsIntegration/src/com/woodhouse/example/activity/ContactsIntegrationActivity.java

希望这可以帮助!

*Not a table, but a ContentProvider http://developer.android.com/reference/android/content/ContentProvider.html

** not strictly true.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修改联系信息 的相关文章

随机推荐

  • 多行点线或虚线文本下划线

    因为 CSS 文本下划线只允许使用实线 并且它的位置位于字符串的底部 所以我使用 border bottom 加上一点填充来实现点或虚线文本下划线 h2 border bottom 1px dotted 999 padding bottom
  • 在 Ada 中立即开始循环的下一次迭代

    我想要一个无限循环 其中循环几乎贯穿整个程序 并且在任何时候 基于条件语句 我希望它退出循环的特定迭代并返回到顶部并执行 有办法做到这一点吗 它不必是无限循环 它可以是一个for循环 我只想让它进入该循环的下一次迭代 您可以使用 goto
  • 如何简单地验证 Rails 中的复选框

    如何简单地验证 Rails 中的复选框是否已选中 该复选框用于最终用户协议 它位于模式窗口中 可以说我有复选框 我应该在哪里以及如何验证这一点 我在这里看到了大多数关于 Rails 中复选框验证的帖子 但没有一个适合我的需要 Adding
  • 使用 ADO.Net 将 utf-8 写入 SQL Server 文本字段并维护 UTF-8 字节

    我有一些编码为 UTF 8 的 xml 我想将其写入 SQL Server 中的文本字段 UTF 8 与 Text 字节兼容 因此它应该能够执行此操作 然后读出仍编码为 utf 8 的 xml 然而 UTF 8 中的多字节特殊字符 例如 会
  • 如何从 AS3 代码调用 Tamarin ESC 编译器?

    我正在尝试从 AS3 代码调用 Tamarin 的 ESC 编译器 我已经在 Flash Player 中加载了 ESC 编译器字节代码 但是当我调用它时 ESC 编译器总是返回相同的不执行任何操作的字节代码 无论我提供什么源代码 人类可读
  • TclError: # 参数错误错误

    我不知道出了什么问题 但我一直收到这个信息 Tkinter 回调中出现异常 回溯 最近一次调用最后一次 文件 Library Frameworks Python framework Versions 7 3 lib python2 7 li
  • Jersey 1.6 和 Spring 3.0.5 使用 Maven

    我很难让 Jersey 与 Spring 3 0 5 一起工作 我发现很多人说他们能够让它发挥作用 但我运气不好 我总是得到 java lang NoSuchMethodError org springframework web conte
  • 如何使用CloudKit的CKShare创建共享?

    我正在研究新的CKShare苹果今年发布的 我对此有一些疑问 我试图关注 WWDC 的 CloudKit 中的新增功能 视频 但部分代码在 Xcode 中不再工作 我想做的是 用户输入他的姓名和电话 然后单击UIButton 将与特定的人分
  • 与Linux中的内存映射设备通信

    我有一个内存映射设备 我需要与它通信 我的老板告诉我可以通过 dev mem 我在网上查了一下 没有找到任何相关的内容 是否可以做到 或者我的老板错了 假设您拥有超级用户权限 任何帮助表示赞赏 你在地址处有一个内存映射设备MMIO ADDR
  • 如何检查文本视图中输入的拼写?

    我有一个 UITextview 用户在其中输入文本 之后 我将该文本作为字符串并将其显示在另一个文本视图中 并想要语法不正确的单词 怎么做 使用自 ios 3 2 起可用的 UITextChecker 类 苹果文档 http develop
  • 如何放大特定点(没有画布)?

    目标很简单 使用鼠标滚轮放大特定点 鼠标所在的位置 这意味着缩放后 鼠标将位于图片的大致相同位置 Purely illustrative I don t care if you use dolphins ducks or madonna f
  • 使用 $not 进行 MongoDB 地理空间查询

    我有一个在 MongoDB 中运行良好的基本地理空间查询 似乎应用 not 来获得补集应该很容易 但它对我不起作用 这是简单的用户错误吗 或者 MongoDB 在概念上不能处理这个查询吗 我在中找不到任何此类限制文档 http www mo
  • Spark中的cache()会改变RDD的状态还是创建一个新的RDD?

    这个问题是我之前问题的后续问题如果我在 Spark 中缓存同一个 RDD 两次会发生什么 https stackoverflow com questions 36195105 what happens if i cache the same
  • sed 匹配换行符中的模式

    这是我的输入
  • 有什么方法可以列出所有用户定义的 PostgreSQL 函数吗?

    PostgreSQL 提供命令 dv 来列出所有视图 是否有类似的方法来列出所有用户定义的函数或仅列出特定用户定义的函数 sf 要求您知道函数的名称 它将提供函数的定义 df 列出了所有函数 而且有很多 我想要一种方法来显示我定义的函数列表
  • FileUpload 在 Android WebView 中不起作用

    我知道这个问题在这里被问了很多次 但我刚刚开始 Android 开发 所以对应用这些解决方案感到困惑 我的代码 FileUpload 选项不起作用 它不是打开文件选择对话框 请帮我 public class MainActivity ext
  • 在 Ansible 的字典列表中搜索键 [重复]

    这个问题在这里已经有答案了 我有一个类似于以下内容的字典列表 subnets name subnet1 name34554 address 192 168 1 100 id id1 name subnet2 name67678 addr 1
  • 在 PhantomJS 中使用 Jasmine 测试 $interval

    看来我的interval永远不会被触发 我有一个指令 其中包含 interval我想测试一下 我删除了所有与指令相关的代码 并将这段代码添加到其控制器中 window called 0 window interval interval fu
  • 如果 Select 元素没有标签,如何使其可访问?

    我正在学习 HTML 中的可访问性 我遇到了一个选择下拉 HTML 元素的示例 该元素旁边没有任何文本标签 仅页面上方标题的上下文可以让您了解该元素的含义元素包含例如例如 有关国家 地区的部分中的国家 地区列表 在其上运行辅助工具时 该工具
  • 修改联系信息

    我正在尝试插入和更新一条信息existing联系 因此我创建了一个示例应用程序来开发该功能 我希望示例应用程序做的就是插入 或如果存在 更新联系人的电子邮件地址 我通过系统意图选择联系人 如下所示 startActivityForResul