热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android数据存储(ContentProvider,调用系统联系人ContentProvider实现查询和增加联系人)

1.回顾  上篇学习了安卓的文件存储,包括 存储在sd卡上;2.重点  (1)了解四大组件之一ContentProvider  (2)实现查询通信录中联系人
1.回顾
   上篇学习了 安卓的 文件存储 ,包括  存储在 sd卡上;

2.重点 
  (1)了解 四大组件之一 Content Provider 
  (2)实现 查询通信录中 联系人
  (3)实现 新增联系人到通信录

3.介绍
 (1) ContentProvider相对于其它的方式比较复杂,当然其功能相对于其它的方式也是革命性的改变。
 (2)它能够实现跨应用之间的数据操作。
 (3)利用ContentResolver对象的delete、update、insert、query等方法去操作 ContentProvider的对象,
 (4)让  ContentProvider对象的方法去对数据操作。

4.例子
    ——调用通信录实现 联系人的查询和添加——

  4.1 效果图

                                                   技术分享

    4.2 添加权限

   在 AndroidMainfest.xml 文件中添加 ,读取联系人和添加联系人的权限
    
    


    4.3 查询联系人实现

/*
	 * 查询联系人
	 */
	private void selectContact(){
		/**
		 * 使用ContentResolver 实现 这个和 ContentProvider 的参数 一模一样
		 * 
		 * 联系人的 URI 提供: ContactsContract.Contacts.CONTENT_URI
		 */

		// 查询联系人
		ContentResolver resolver = getContentResolver();

		Cursor cursor = resolver.query(Contacts.CONTENT_URI, new String[] {Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);

		String str = "联系人:\n";

		if (cursor != null) {
			while (cursor.moveToNext()) {
				
					String id=cursor.getString(cursor.getColumnIndex(Contacts._ID));
					String name=cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME));
				    str+=" id="+id+" name="+name; 
				    //通过id 查询 电话
				   Cursor c=resolver.query(Phone.CONTENT_URI,new String[]{Phone.NUMBER,Phone.TYPE},Phone.CONTACT_ID+"=?",new String[]{id},null);
				   if(c!=null){
					   while(c.moveToNext()){
						   String num=c.getString(c.getColumnIndex(Phone.NUMBER));
						   String type=c.getString(c.getColumnIndex(Phone.TYPE));
						   str+=" num="+num+" type="+type;
					   }
					   c.close();
				   }
					
					str+="\n";
			}
			cursor.close();
		}
		
		tv_show.setText(str);
	}


   4.4 实现 添加 联系人

	/**
     * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
     * 
     * 这是后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里可见
     */
    public void testInsert(){
        ContentValues values = new ContentValues();
        //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
        Uri rawCOntactUri= this.getContentResolver().insert(RawContacts.CONTENT_URI, values);
        long rawCOntactId= ContentUris.parseId(rawContactUri);
        
        //往data表入姓名数据
        values.clear();
        values.put(Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
        values.put(StructuredName.GIVEN_NAME, "我是测试联系人");
        this.getContentResolver().insert(
                android.provider.ContactsContract.Data.CONTENT_URI, values);
        
        //往data表入电话数据
        values.clear();
        values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        values.put(Phone.NUMBER, "10000000010001");
        values.put(Phone.TYPE, Phone.TYPE_MOBILE);
        this.getContentResolver().insert(
                android.provider.ContactsContract.Data.CONTENT_URI, values);

        //往data表入Email数据
        values.clear();
        values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
        values.put(Email.DATA, "labelnet@outlook.com");
        values.put(Email.TYPE, Email.TYPE_WORK);
        this.getContentResolver().insert(
                android.provider.ContactsContract.Data.CONTENT_URI, values);
    }


5.总结
  (1) 在和通信录打交道 ,不要忘记 添加权限 ;
  (2)Content Provider 实现跨应用之间的数据操作;

6.demo 免积分下载
http://download.csdn.net/detail/lablenet/9055113

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android-数据存储(Content Provider ,调用系统 联系人 ContentProvider实现查询和增加联系人)


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
永久的花蕾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有