文档章节

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

artshell
 artshell
发布于 2014/10/08 13:20
字数 663
阅读 2635
收藏 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
成都
程序员
【译】Asp.net MVC并不仅仅只是Linq to SQL

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

范大脚脚
2017/12/28
0
0
Android中的Intent详细讲解

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

谷飞
2012/11/23
0
0
android intent机制

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

墨梅
2014/04/27
0
0
Android中的Intent[转]

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

kevin.gan
2010/01/06
0
0
10 个新的 jQuery 表单插件(2013年8月)

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

oschina
2013/08/03
6.3K
11

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——单例模式

1. 认识单例模式 1. 定义:一个类中仅有一个实例,并提供一个访问它的全局访问点。 2. 结构:仅一个Singleton类,其中包含一个static类变量,而类变量的类型就是Singleton类,而且Singleton...

江左煤郎
31分钟前
1
0
前端安全系列之二:如何防止CSRF攻击?

背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常...

talen
32分钟前
1
0
Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图) 最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的...

原创小博客
34分钟前
1
0
Springboot + mongoDB : So easy

1. dependancy compile('org.springframework.boot:spring-boot-starter-data-mongodb') 2. config # mongodbspring.data.mongodb.host=***.mongodb.rds.aliyuncs.comspring.data.mongod......

园领T
45分钟前
2
0
centos 7( linux )下安装elasticsearch教程

目录 概述 环境准备 elaticsearch简介 安装elasticsearch 彩蛋 概述 很久没有写博客了,最近在做全文检索的项目,发现elasticsearch踩了不少坑,百度点进去又是坑,在此记录一下自己的踩坑历程。...

java_龙
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部