Android向通讯录添加联系人的一般方法

简介: Android向通讯录添加联系人的一般方法以一个简单的例子加以说明,记得需要相应的权限: 测试代码,关键的内容就在add函数里面。


Android向通讯录添加联系人的一般方法

以一个简单的例子加以说明,记得需要相应的权限:

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


测试代码,关键的内容就在add函数里面。

package zhangphil.demo;

import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.Data;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.activity_main);

		addContact("zhangphil", "12345678901");
	}

	// 一个添加联系人信息的例子
	public void addContact(String name, String phoneNumber) {
		// 创建一个空的ContentValues
		ContentValues values = new ContentValues();

		// 向RawContacts.CONTENT_URI空值插入,
		// 先获取Android系统返回的rawContactId
		// 后面要基于此id插入值
		Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
		long rawContactId = ContentUris.parseId(rawContactUri);
		values.clear();

		values.put(Data.RAW_CONTACT_ID, rawContactId);
		// 内容类型
		values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		// 联系人名字
		values.put(StructuredName.GIVEN_NAME, name);
		// 向联系人URI添加联系人名字
		getContentResolver().insert(Data.CONTENT_URI, values);
		values.clear();

		values.put(Data.RAW_CONTACT_ID, rawContactId);
		values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
		// 联系人的电话号码
		values.put(Phone.NUMBER, phoneNumber);
		// 电话类型
		values.put(Phone.TYPE, Phone.TYPE_MOBILE);
		// 向联系人电话号码URI添加电话号码
		getContentResolver().insert(Data.CONTENT_URI, values);
		values.clear();

		values.put(Data.RAW_CONTACT_ID, rawContactId);
		values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
		// 联系人的Email地址
		values.put(Email.DATA, "zhangphil@xxx.com");
		// 电子邮件的类型
		values.put(Email.TYPE, Email.TYPE_WORK);
		// 向联系人Email URI添加Email数据
		getContentResolver().insert(Data.CONTENT_URI, values);

		Toast.makeText(this, "联系人数据添加成功", Toast.LENGTH_SHORT).show();
	}
}



附录文章:

1,《Android根据联系人姓名首字符顺序读取通讯录》链接:http://blog.csdn.net/zhangphil/article/details/47250747

2,《Android基于PinnedSectionListView实现联系人通讯录》链接:http://blog.csdn.net/zhangphil/article/details/47271741

相关文章
|
2月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
47 2
基于Android P,自定义Android开机动画的方法
|
2月前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
88 2
|
10天前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
27 2
|
2月前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
83 1
|
2月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
165 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
2月前
|
Android开发
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
30 0
|
2月前
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
16 0
|
Java Android开发
Android NDK开发系列教程3:基本方法调用及传参(续)
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 上一节主要讲解Java向native传参,下面主要讲解从native传相应的数据到java层。
1247 0
|
5天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
2天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
17 7
下一篇
无影云桌面