Android下ContactsContract类详解

简介:   在android4.0之后的版本,联系人的信息有ContactsContract这样一个类来管理。这个类的结构比较复杂,所以有必要分析一下。官方对ContactsContract的定义是:一个存储有联系人相关信息的可以扩展的数据库。该数据库的结构分为三层: 1、ConstractContact.data:该类可以存储任何数据,里面的每一项都指向一条raw contact(后面
  在android4.0之后的版本,联系人的信息有ContactsContract这样一个类来管理。这个类的结构比较复杂,所以有必要分析一下。官方对ContactsContract的定义是:一个存储有联系人相关信息的可以扩展的数据库。该数据库的结构分为三层:

1、ConstractContact.data该类可以存储任何数据,里面的每一项都指向一条raw contact(后面讲),通常是用来存放一段联系人信息,比如一个电话号码或者是相关的元数据(metadata)。Data是一个可以盛放任何类型数据的通用表,每一行的数据类型有该行的MIMETYPE字段决定,并决定了对应的从DATA1到DATA15等字段的意义。比如,如果一行的类型为Phone.CONTENT_ITEM_TYPE,那么该行的DATA1字段就存储的是电话号码;

2、ConstractContact.RawContacts:原始数据,每一行描述了一个人的相关信息,并与一个账户相关;

3、ConstractContact.Contacts:一条或多条RawContacts的集合,用于描述一个联系人的相关信息。

data中的类型是可以扩展的,目前自带的类型都在ConstractContact.CommonDataKind中。如Phone等。

下面以一个读取联系人信息的程序片段来说明该类的使用:

	private void toGetContact()
	{
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_PICK);
		intent.setData(ContactsContract.Contacts.CONTENT_URI);
		startActivityForResult(intent,this.GET_CONTACT);
	}
以上代码调用程序自带的读取联系人信息程序。其中setData为ContactsContract.Contacts.CONTENT_URI,表示将数据指向了联系人信息。


	private String afterGetContact(Intent data)
	{
		if(data==null){
			return null;
		}
		Uri result=data.getData();		
        Cursor cursor = getContentResolver().query(result, null, null, null, null);
        cursor.moveToFirst();

        
        String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
        Cursor phone=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
        		ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",new String[]{id},null );
        
        if(phone.moveToFirst())
        {
          String phoneNum=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
		  return phoneNum;
        }
        else
        {
        	return null;
        }
		
	}

这一段代码是在OnActivityResult()中执行的,也就是调用完联系人程序之后返回后执行的函数。通过返回的数据uri进行查询得到cursor所指向的数据并得到该用户的ID。我们的目的是得到该用户的电话号码,所以应该是利用用户的ID去获得用户的号码。但是用户的号码并不在result所指向的表中,而是在ContactsContract.CommonDataKinds.Phone.CONTENT_URI所指向的表中。所以就要对该表进行查询,并且Phone下的CONTACT_ID与Contact下的_ID是同义的。所以可以设置where语句为:CONTACT_ID=id来得到所求的电话号码。
目录
打赏
0
0
0
0
130
分享
相关文章
Android 分享机顶盒项目的封装类《GridView》(二)(转)
Android 分享机顶盒项目的封装类《GridView》(二)(转)
61 2
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
89 1
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
53 2
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
125 0
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
89 0
Android面试题之Kotlin的几种常见的类
这篇文章探讨了Kotlin编程语言中的初始化顺序、延迟初始化、惰性初始化、`lateinit`与`by lazy`的区别、初始化注意事项、继承、嵌套类、数据类、单例类和枚举类的使用,以及密封类的概念。文中通过示例代码详细解释了各种特性,并提醒读者关注初始化顺序和线程安全问题。同时,鼓励读者关注作者的公众号“AntDream”获取更多相关文章。
64 1
Android 分享机顶盒项目的封装类《GridView》(三)(转)
Android 分享机顶盒项目的封装类《GridView》(三)(转)
65 2
如何访问 android系统hide的类或接口
如何访问 android系统hide的类或接口
359 1
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
860 1
Android——application全局类的使用
Android——application全局类的使用
125 0

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
    12
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    28
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    2
  • 4
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    14
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    4
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    4
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    2
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    3
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    6
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    2
  • 1
    android FragmentManager 删除所有Fragment 重建
    18
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    28
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    35
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    42
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    141
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 8
    Android历史版本与APK文件结构
    159
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等