发现对系统的联系人进行操作的api很乱,感觉逻辑有点不清楚......

主要用到这4个类:

android.provider.ContactsContract.CommonDataKinds.Email;
android.provider.ContactsContract.CommonDataKinds.Phone;
android.provider.ContactsContract.CommonDataKinds.StructuredName;
android.provider.ContactsContract.Data;

 import android.content.ContentResolver;
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.Data;
import android.provider.ContactsContract.RawContacts;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends ActionBarActivity {
ContentResolver contentResolver;
EditText name;
EditText phone;
EditText emil; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (EditText) findViewById(R.id.editText_name);
phone = (EditText) findViewById(R.id.EditText_phone);
emil = (EditText) findViewById(R.id.editText_emil);
contentResolver = getContentResolver();
Button saveButton = (Button) findViewById(R.id.button_insert);
saveButton.setOnClickListener(new MyOnclickListener()); } class MyOnclickListener implements View.OnClickListener { @Override
public void onClick(View v) {
ContentValues values = new ContentValues();
Uri rawContactUri = contentResolver.insert(RawContacts.CONTENT_URI, values);//插入一个空值,目的是增加一条记录,返回该记录的id
long rawContactId = ContentUris.parseId(rawContactUri);
Log.i("csx", "rawContactId:" + rawContactId);
// 插入姓名
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, name.getText().toString());
contentResolver.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, phone.getText().toString());
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
contentResolver.insert(Data.CONTENT_URI, values);
// 插入邮箱
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, emil.getText().toString());
values.put(Email.TYPE, Email.TYPE_WORK);
contentResolver.insert(Data.CONTENT_URI, values); }
}

用ContentProvider向系统增加联系人的更多相关文章

  1. 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)

    1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...

  2. Android 获取系统的联系人

    本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将conta ...

  3. DB系统预警联系人API

    Author:Skate Time:2014/12/16 DB系统预警联系人API 在我们维护系统时,须要把系统的报警信息即时传递给对应同学.假设把联系方式直接写到脚本里.对以后的维护变更将埋下祸根, ...

  4. 给虚拟机下面的ubuntu系统增加硬盘存储空间

    给虚拟机下面的ubuntu系统增加硬盘存储空间   由于ubuntu系统是安装在vsphere上面的,所以可能会和vmware上面的有一点区别,打开exsi系统的配置页面,如下图所示. 选择添加存储器 ...

  5. [ubuntu][deepin]系统增加自定义开机启动项

    [ubuntu][deepin]系统增加自定义开机启动项 进行配置 cd /etc/init.d/ ls vim myScript nginx实例 #! /bin/sh # chkconfig: # ...

  6. 烂泥:KVM虚拟机windows系统增加硬盘

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前一篇文章介绍了有关linux系统添加硬盘的方法,这次我们来介绍有关windows系统添加的相关步骤. 其实linux和windows添加的硬盘的方法都 ...

  7. 烂泥: KVM虚拟机Linux系统增加硬盘

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. Linux虚拟机在使用过程中,硬盘空间不够使用.由于前期没有做LVM,所以只能手动添加新的硬盘. 给虚拟机添加硬盘有两种方法: 1.通过virsh at ...

  8. 虚拟机 Linux 系统增加换页空间

    想在虚拟机里面安装oracle10g,发现默认的swap交换空间不满足最低要求,因为我分配的物理内存是1G,那么就按照要求需要2G的swap交换空间,默认只有1G的交换空间.添加swap交换空间的步骤 ...

  9. linux系统增加开机启动服务/应用

    操作 在/etc/init.d下新建示例脚本文件(customize.sh),该脚本会启动zookeeper服务.内容如下: #!/bin/sh /usr/local/zookeeper-/bin/z ...

随机推荐

  1. ZOJ3228 - Searching the String(AC自动机)

    题目大意 给定一个文本串,接下来有n个模式串,每次查询模式串出现的次数,查询分两种,可重叠和不可重叠 题解 第一次是把AC自动机构造好,跑n次,统计出每个模式串出现的次数,交上去果断TLE...后来想 ...

  2. 局域网接入Internet

    说在前面的话 局域网接入Internet的方式多样: 有1传统的Modem(调制解调器)拨号接入,费用低廉的2 ISDN和 3 ADSL接入,费用较高的4 DDN专线接入,5 Cable Modem高 ...

  3. Python 3. 里filter与generator expression的区别

    # -*- coding: utf-8 -*- """ A test to show the difference between filter and genrator ...

  4. [转]把项目从VS2005升级到VS2013

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1394348 ...

  5. 关于WinRT中c++和c#相互调用的问题

    先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x): 首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目.只能 ...

  6. Mysql性能优化之缓存参数优化

    数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化 ...

  7. 局域网动态ip

    1. 局域网IP对网速没有任何影响.点“开始”“设置”进入“网络连接” 右击“本地连接”选择“属性”选中“Internet协议(TCP/IP)” 在下面的一些按钮中点“属性”,之后你可以设置局域网IP ...

  8. EasilyUI的一个简单的拖拽功能

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs&quo ...

  9. Character Studio

  10. ASP.NET Identity 用户注册相关设定

    此部分可以在 Web项目中的App_Start目录下的 IdentityConfig.cs 文件进行设置. 1.配置密码的验证逻辑 manager.PasswordValidator = new Pa ...