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/5Cursor 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 hongxiaophoto_uri:nullsend_to_voicemail:0contact_status:nullcontact_status_label:nullpinned:0display_name:wang hongxiaophonebook_label_alt:Hphonebook_bucket:23contact_status_res_package:nullin_default_directory:1photo_id:nullcustom_ringtone:null_id:5times_contacted:0phonebook_label:Wdisplay_name_alt:hongxiao, wanglookup:0r5-D9ADC7B9BBC9C7B9DBBDADC9phonetic_name:nulllast_time_contacted:0contact_last_updated_timestamp:1477791122100has_phone_number:1in_visible_group:1display_name_source:40photo_file_id:nullis_user_profile:0contact_status_ts:nullsort_key_alt:hongxiao, wangphonebook_bucket_alt:8contact_presence:nullstarred:0photo_thumb_uri:nullcontact_status_icon:nullcontact_chat_capability:nullphonetic_name_style:0name_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/5String[] 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()){// 联系人IDid = 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,转载请注明出处. 读取系统联系人 当点 ...
随机推荐
- 关于Linux和Windows下部署mysql.data.dll的注册问题
mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available ...
- Floyd-Warshall 全源最短路径算法
Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...
- Html5 希尔排序演示
希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 如下图所示: 代码如下: <!DOCTYPE html> <html& ...
- ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API
在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端通过CNBlogsAuthorizationServerProvider(Authorization ...
- android笔记:获取View组件宽度以及ViewTreeObserver
View宽高测量方法: 测量方法有三种,如下: 1)(直接在onCreate()执行) int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureS ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(36)-文章发布系统③-kindeditor使用
系列目录 我相信目前国内富文本编辑器中KindEditor 属于前列,详细的中文帮助文档,简单的加载方式,可以定制的轻量级.都是系统的首选 很多文章教程有kindeditor的使用,但本文比较特别可能 ...
- .NET Core下的日志(2):日志模型详解
NET Core的日志模型主要由三个核心对象构成,它们分别是Logger.LoggerProvider和LoggerFactory.总的来说,LoggerProvider提供一个具体的Logger对象 ...
- ng-directive-选择数据
本文是用angularjs指令写的一个简易数据选择功能,其实就是两个下拉框,把两边的数据相互交换而已,这样的功能最早应该是用jquery写过,但移动端js框架angularjs如果还嵌套jquery来 ...
- 控制EasyUI DataGrid高度
这次要说的是控制EasyUI的高度,平时我公司的项目,用EasyUI较多,然后datagrid这个组件是用的非常多的.平时我们都是固定高度,常见代码如下: <table ...
- c 高级函数的简单用法
c 中内置了很多高级的函数,我们先使用排序函数看一下 #include <stdio.h> #include <stdlib.h> #include <string.h& ...