修改联系信息

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(使用前将#替换为@)

修改联系信息 的相关文章

  • onBeaconServiceConnect 未调用

    和以前一样 我使用 Android Beacon 库 它已经工作了 我可以通过 BLE 低功耗蓝牙找到信标 但是现在 更新到最新版本的库后 现在方法onBeaconServiceConnect 不再跑了 请告诉我我需要做什么才能让它发挥作用
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 带有一、二和三个按钮的 Android 警报对话框

    我不经常发出警报 但每次发出警报时 我都会花一些时间来阅读文档 https developer android com guide topics ui dialogs html并弄清楚如何去做 由于我现在不得不这样做几次 所以我将在下面写一
  • Service 和 IntentService,运行从服务器轮询数据库值的服务哪个更好?

    我读过很多关于Service and IntentService 然而 当做出决定时 我没有足够的信心选择使用哪种类型来创建一个后台服务 该服务将在一定时间间隔内从数据库轮询数据 并在获得所需数据时停止它 因为数据代表请求的状态 例如 订购
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • ffmpeg视频已压缩但无法在浏览器中播放

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • 如何检查 Android 中连接的 wifi 网络是否处于活动状态

    如何自动检查android中连接的WiFi网络上的互联网是否处于活动状态 我可以检查 wifi 是否已启用或 wifi 网络是否已连接 但我不确定如何检查互联网是否已连接 这可能吗 private boolean connectionAva
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • 在 React Native 中调试应用程序崩溃

    我是 React Native 新手 我正在尝试安装 React Native Facebook SDK 以便我可以使用我的应用程序进行 Facebook 登录 我按照此处列出的步骤操作 https tylermcginnis com in
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E

随机推荐

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

    因为 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