文档章节

使用Intent.ACTION_EDIT 编辑联系人问题!

artshell
 artshell
发布于 2014/10/08 13:20
字数 663
阅读 2584
收藏 0
点赞 0
评论 0

参看官方文档:http://developer.android.com/guide/topics/providers/contacts-provider.html#AccessRetrieval and modification with intents 部分

本文讨论的是编辑指定的联系人,否则你应该使用Intent.ACTION_INSERT_OR_EDIT

涉及到的Action是:Intent.ACTION_EIDT
涉及到的Provider契约类常量是:
Contacts.CONTENT_LOOKUP_URI  指定相关联系人的URI
Contacts.CONTENT_ITEM_TYPE  指定联系人的MIME类型

重点是如何构建一个指定联系人的Contacts.CONTENT_LOOKUP_URI

官网对Contacts.CONTENT_LOOKUP_URI的说明是:

A content:// style URI for this table that should be used to create shortcuts or otherwise create long-term links to contacts. This URI should always be followed by a "/" and the contact's LOOKUP_KEY. It can optionally also have a "/" and last known contact ID appended after that. This "complete" format is an important optimization and is highly recommended.

As long as the contact's row ID remains the same, this URI is equivalent to CONTENT_URI. If the contact's row ID changes as a result of a sync or aggregation, this URI will look up the contact using indirect information (sync IDs or constituent raw contacts).

Lookup key should be appended unencoded - it is stored in the encoded form, ready for use in a URI.

以上大致意思是,可以通过如下两种方式构建:

第一种:

Uri content_lookup_uri = UriContentUris.withAppendedId(Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,lookupKey), contactId);
// contactId为可选参数,可以直接写成如下形式
Uri content_lookup_uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,lookupKey);

第二种:

Uri content_lookup_uri = UriContentUris.withAppendedId(Contacts.CONTENT_URI,contactId);
/*
注意:这里用的是Contacts.CONTENT_URI不是Contacts.CONTENT_LOOKUP_URI,否则会出现异常:
ContactLoader﹕ Error loading the contact: content://com.android.contacts/contacts/lookup/159
    java.lang.IllegalArgumentException: Invalid lookup id: 159 
*/

首先是如何获得联系人的LOOKUP_KEY和ID,通常情况下,当你使用Intent.ACTION_EDIT方式时,说明你已经拿到了一个CONTENT_LOOKUP_URI,为了对以上代码更好的说明和方便起见我们通过如下代码块打开联系人应用,从中挑选一个联系人加以说明:

public static final int REQUEST_CODE = 1;
//...........
Intent pick_Contact = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(pick_Contact, REQUEST_CODE);

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Uri content_lookup_uri = data.getData(); // 这里拿到的content_lookup_uri 就是采用第一种方式构建的
        super.onActivityResult(requestCode, resultCode, data);
    }

通过以上步骤就拿到了content_lookup_uri,通过下面代码块来对指定联系人进行编辑

Intent editIntent = new Intent(Intent.ACTION_EDIT);
/* 
注意:当既要给Intent设置Data属性又要设置Type属性时,必须使用setDataAndType()方法
否则会得到异常:
(Error loading the contact: null java.lang.IllegalArgumentException: uri must not null)
例如,使用setData()然后再使用setType(),后者方法会清除前者设置的属性。或者在new Intent对象时,使用的构造方法是:
Intent(String action, Uri uri)或者
Intent(String action, Uri uri,Context packageContext, Class<?> cls)然后使用setType()设置的属性
以上请参见源码注释或文档
*/
editIntent.setDataAndType(content_lookup_uri2,ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivity(editIntent);

当然多数时候我们直接使用Intent.ACTION_INSERT_OR_EDIT来编辑联系人 本文只是讨论在使用Intent.ACTION_EDIT时的注意事项

© 著作权归作者所有

共有 人打赏支持
artshell
粉丝 2
博文 56
码字总数 5163
作品 0
成都
程序员
Android中的Intent详细讲解

在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”。 而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。 在这些...

谷飞 ⋅ 2012/11/23 ⋅ 0

android intent机制

在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”。 而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。 在这些...

墨梅 ⋅ 2014/04/27 ⋅ 0

Android中的Intent[转]

在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”。而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组...

kevin.gan ⋅ 2010/01/06 ⋅ 0

【译】Asp.net MVC并不仅仅只是Linq to SQL

很多Asp.net的教程中的示例代码使用的数据访问方法是Linq to Sql或是Entity Framework。我在www.asp.net的论坛上看到很多关于讨论是否有其他替代的数据库访问方式,回答是:当然有。这篇文章...

范大脚脚 ⋅ 2017/12/28 ⋅ 0

10 个新的 jQuery 表单插件(2013年8月)

1. Chosen jQuery Chosen Plugin 是一个 jQuery 插件,用来将网页中的下拉框进行功能扩展和美化。可实现对下拉框的搜索,多个标签编辑等功能,如下图所示: 2. Form Validation Engine jQue...

oschina ⋅ 2013/08/03 ⋅ 11

第八讲:Intent入门指南

一、什么是Intent: 在一个Android应用中,Intent是对执行某个操作的一个抽象描述,Intent 负责提供组件之间相互调用的相关信息传递,实现调用者和被调用者之间的解耦。 二、Intent的属性: ...

程序袁_绪龙 ⋅ 2014/08/25 ⋅ 0

Android 搜索框 search dialog 和 search widget

分为search dialog和search widget 区别: A,search dialog是一个被系统控制的UI组件。但他被用户激活的时候,它总是出现在activity的上。 B,Android系统负责处理search dialog上所有的事件,...

CrazyManDF ⋅ 2016/08/08 ⋅ 0

解决 iOS 内英文系统中联系人排序问题

好多人喜欢将 iOS 设置为英文系统,但是有一个问题其实蛮头疼的,就是联系人的排序问题。在英文系统中,所有中文名字被默认排到了 # 后面,而不是按照拼音来分栏的。 网上有一个方法就是将每...

xh4n3 ⋅ 2015/07/26 ⋅ 0

[ASP.NET MVC3.0]Contact Manager 之迭代开发 一

原文地址:http://www.asp.net/mvc/tutorials/iteration-1-create-the-application-cs 紫色永恒的翻译:http://www.cnblogs.com/024hi/archive/2009/03/19/ASPNETMVCSAMPLECONTACTMANAGER1.......

luckTom ⋅ 2014/11/13 ⋅ 0

关于联系人如何同步到通话记录的问题

问题简化为:一个TableHost包含3个Actvity,Activity2为一个LstView,显示表2的数据,Activity3为一个ListView,显示表3的数据。如果我对Activity2的操作更新了表3,要求刷新Activity3这个已...

hbszqf ⋅ 2012/11/15 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部