ContentProvider中央档案馆,以及获取联系人电话的示例
- ContentProvider:为我们的应用程序之间提供了共享数据的一种机制,比如获取手机里面的通话记录,通讯录,多媒体,图片等;
- ContentProvider为数据的存储和获取数据提供了统一的数据接口,它对数据进行了封装,我们不用关心数据存储的细节;
- 使用ContentProvider可以在不同的应用程序之间共享数据;
- 每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据;
- Android为我们提供的ContentProvider,都存放在android.provider包中;
- URI介绍
- 概念就是为系统的每一个资源给一个名字,比如通话记录;
- 每一个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的的数据;
- 每个URI包含四部分
- 前缀:比如content://
- 标识:用于表示唯一性,外部通过这个标识找到它,一般为该ContentProvider的包+类的名称;
- 路径:就是你要操作数据中表的名字
- 如果URI中捕获的记录包含该ID,就返回该ID对应的数据,如果没有ID,就返回全部.比如路径可以定义为:
- /person/10:返回person表中id为10的记录;
- /person/10/name:id为10的记录的name字段;
- ContentResolver操作ContentProvider中的数据;可以使用Activity提供的getContentResolver()方法;它有四个相同签名的方法insert,update,delete,query
- 获取联系人信息
// 通过隐式意图打开通讯录
Intent intent =newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent,1001);
- @Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode ==1001){
if(resultCode == RESULT_OK){
ContentResolver resolver = getContentResolver();
Uri uri = data.getData();
//uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
Cursor cursor = resolver.query(uri,null,null,null,
null);
if(cursor.moveToFirst()){
for(int i =0; i < cursor.getColumnCount(); i++){
Log.i("-->", cursor.getColumnNames()[i]+":"+ cursor.getString(i));
}
sort_key:wang hongxiao
photo_uri:null
send_to_voicemail:0
contact_status:null
contact_status_label:null
pinned:0
display_name:wang hongxiao
phonebook_label_alt:H
phonebook_bucket:23
contact_status_res_package:null
in_default_directory:1
photo_id:null
custom_ringtone:null
_id:5
times_contacted:0
phonebook_label:W
display_name_alt:hongxiao, wang
lookup:0r5-D9ADC7B9BBC9C7B9DBBDADC9
phonetic_name:null
last_time_contacted:0
contact_last_updated_timestamp:1477791122100
has_phone_number:1
in_visible_group:1
display_name_source:40
photo_file_id:null
is_user_profile:0
contact_status_ts:null
sort_key_alt:hongxiao, wang
phonebook_bucket_alt:8
contact_presence:null
starred:0
photo_thumb_uri:null
contact_status_icon:null
contact_chat_capability:null
phonetic_name_style:0
name_raw_contact_id:5
通过分析,我们可以得到我们关心的三个字段- @Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode ==1001){
if(resultCode == RESULT_OK){
int id;
String name;
String phone;
ContentResolver resolver = getContentResolver();
Uri uri = data.getData();
// uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
String[] projection =newString[]{ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts
._ID,ContactsContract.Contacts.HAS_PHONE_NUMBER};
Cursor cursor = resolver.query(uri, projection,null,null,null);
if(cursor.moveToFirst()){
// 联系人ID
id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 联系人姓名
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// 是否有电话的个数
int has_phone_number = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts
.HAS_PHONE_NUMBER));
if(has_phone_number >0){
String selection =ContactsContract.CommonDataKinds.Phone._ID +"=?";
String[] selectionArgs =newString[]{id +""};
// 如果用Android6.0,会报错,因为需要获取运行时权限
Cursor cursor2 = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
selection, selectionArgs,null);
if(cursor2.moveToFirst()){
phone = cursor2.getString(cursor2.getColumnIndex(ContactsContract.CommonDataKinds
.Phone.DATA1));
tv_phone_number.setText("id:"+ id +"\n姓名:"+ name +"\n电话个数:"+
has_phone_number +"\n电话号码:"+ phone);
}
}
}
}
}
}
ContentProvider中央档案馆,以及获取联系人电话的示例的更多相关文章
- android中ContentProvider获取联系人 总结
35.内容提供者:ContentResolver 用内容提供者来获取联系人信息 35-1:权限 <!-- 对联系人的读.写权限 --> <uses-permission androi ...
- ContentProvider往通讯录添加联系人和获取联系人
public class MainActivity extends Activity { private People people; private List<People> pList ...
- Android 查看联系人电话和姓名(ContentProvider)
1.介绍 2.使用方法 3.在AndroidManifest.xml文件中添加相关设置 <uses-permission android:name="android.permissio ...
- Android(java)学习笔记250:ContentProvider使用之获得系统联系人信息02(掌握)
1.重要: 系统删除一个联系人,默认情况下并不是把这个联系人直接删除掉了,只是做了一个标记,标记为被删除. 2.前面一讲说过了如何获取系统联系人信息(通过ContentProvider),获取联系人信 ...
- Android(java)学习笔记249:ContentProvider使用之获得系统联系人信息01
1.系统联系人的数据库(3张最重要的表) (1)raw_contacts 联系人表 保存联系人的id contact_id (2)data 数据表 保存联系人的数据 ( ...
- Android(java)学习笔记194:ContentProvider使用之获得系统联系人信息02(掌握)
1.重要: 系统删除一个联系人,默认情况下并不是把这个联系人直接删除掉了,只是做了一个标记,标记为被删除. 2.前面一讲说过了如何获取系统联系人信息(通过ContentProvider),获取联系人信 ...
- Android(java)学习笔记193:ContentProvider使用之获得系统联系人信息01
1.系统联系人的数据库(3张最重要的表) (1)raw_contacts 联系人表 保存联系人的id contact_id (2)data 数据表 保存联系人的数据 ( ...
- Android 获取联系人手机号码、姓名、地址、公司、邮箱、生日
public void testGetAllContact() throws Throwable { //获取联系人信息的Uri Uri uri = ContactsContract.Contacts ...
- Android 手机卫士--获取联系人信息并显示与回显
前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...
随机推荐
- C#移动跨平台开发(1)环境准备
C#依托于mono平台可以实现Unix平台服务器端开发已经不是什么新鲜事了,而Xarmain公司(初始成员大多来自原Mono.MonoTouch.Mono For Android成员)继续将C#的先进 ...
- Mono+Jexus部署C# MVC的各种坑
如果你看到这篇文章,先别急着动手,过完一遍,确定是你要的再动手. 别人提到的这里不赘述,只说查了好久才知道的. 1号坑:System.IO.FileNotFoundException Could no ...
- C#分布式消息队列 EQueue 2.0 发布啦
前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地 ...
- 2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Linux下UPnP sample分析
一.UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...
- 有意思的记录-Java
1.文件读取 项目外的绝对路径或相对路径文件读取 String path = "/xx/xx.txt"; BufferedReader reader = new BufferedR ...
- Atitit ABI FFI 的区别与联系 attilax总结
Atitit ABI FFI 的区别与联系 attilax总结 FFI stands for Foreign Function Interface. A foreign function interf ...
- iOS---正确使用NSNotification对象
我们在开发程序的时候,程序内不同对象间的通信是不可避免的,iOS中主要有以下这些通信方式: iOS中的通信方式 图中按照耦合度的强弱和通信的形式(一对一还是一对多)进行了划分,这篇文章我们主要说一下N ...
- 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...
- 【Win 10 应用开发】手写识别
记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...