Android学习笔记十七.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider
二、实战源码剖析
2.联系人ContentProvider的Uri
3.
4.获取指定联系人(_ID)的具体信息
String getString(int columnIndex):将指定的列索引对应的值转换为字符串返回
4.联系人的API
(2)ContactsContract.Data
(3)ContactsContract.RawContact
(4)ContactsContract.Contact
(5)ContactsContract.CommonDataKinds类
三、源码
public class ContactProviderTest extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button search=(Button)findViewById(R.id.searchBtn);/*查询联系人*/search.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//1.定义两个List来封装系统的联系人信息,指定联系人的电话号码、Email等详情final ArrayList<String> names=new ArrayList<String>();final ArrayList<ArrayList<String>> details=new ArrayList<ArrayList<String>>();//2.使用ContentResolver查找联系人数据(Query the given URI, returning a Cursor over the result set)Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//3.遍历查询结果,获取系统中所有联系人while(cursor.moveToNext()){//a.获取联系人IDString contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//b.获取联系人的名字String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));names.add(name); //将名字依次添加到List列表中/*-----------------------------------------------------------------------------------------------------*///c.使用ContentResolver查找联系人的电话号码Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null);//d.遍历查询结果,获取该联系人的多个电话号码ArrayList<String> detail = new ArrayList<String>();while(phones.moveToNext()){String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));detail.add("电话号码"+phoneNumber);}phones.close();/*-----------------------------------------------------------------------------------------------------*///e.使用ContentResolver查找联系人的E-Mail地址Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+contactId, null, null);//f.遍历查询结果,获取该联系人的多个E-Mail地址while(emails.moveToNext()){String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));detail.add("邮件地址:"+emailAddress);}emails.close();details.add(detail);}cursor.close();/*-----------------------------------------------------------------------------------------------------*///4.加载result.xmlView resultDialog = getLayoutInflater().inflate(R.layout.result, null);//5.获取resultDialog中ID为list的ExpandableListViewExpandableListView list = (ExpandableListView) resultDialog.findViewById(R.id.list);//6.创建一个ExpandableListAdapter对象ExpandableListAdapter adapter = new BaseExpandableListAdapter(){//a.获取指定组位置、指定子列表项处的子列表项数据@Overridepublic Object getChild(int groupPosition, int childPosition) {return details.get(groupPosition).get(childPosition);}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic int getChildrenCount(int groupPosition) {return details.get(groupPosition).size();}private TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 64);TextView textView = new TextView(ContactProviderTest.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);textView.setPadding(36, 0, 0, 0);textView.setTextSize(20);return textView;}//b.该方法决定每个子选项的外观@Overridepublic View getChildView(int groupPosition,int childPosition, boolean isLastChild,View convertView, ViewGroup parent){TextView textView = getTextView();textView.setText(getChild(groupPosition,childPosition).toString());return textView;}//c.获取指定组位置处的组数据@Overridepublic Object getGroup(int groupPosition) {return names.get(groupPosition);}@Overridepublic int getGroupCount() {return names.size();}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}//d.该方法决定每个组选项的外观@Overridepublic View getGroupView(int groupPosition,boolean isExpanded, View convertView,ViewGroup parent) {TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());return textView;}@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition) {return true;}@Overridepublic boolean hasStableIds() {return true;}};//7.为ExpandableListView设置Adapter对象list.setAdapter(adapter);//8.使用对话框来显示查询结果new AlertDialog.Builder(ContactProviderTest.this).setView(resultDialog).setPositiveButton("确定",null).show();}});/*添加联系人*/Button add=(Button)findViewById(R.id.addBtn);add.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//a.获取程序界面中的三个文本框String name = ((EditText)findViewById(R.id.name)).getText().toString();String phone = ((EditText)findViewById(R.id.phone)).getText().toString();String email = ((EditText)findViewById(R.id.email)).getText().toString();//b.创建一个空的ContentValuesContentValues values = new ContentValues();//c.向RawContacts.CONTENT_URI执行一个空值插入吗,目的是获取系统返回的rawContactIdUri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);long rawContactId=ContentUris.parseId(rawContactUri);values.clear();/*-----------------------------------------------------*/values.put(Data.RAW_CONTACT_ID, rawContactId);//d.设置内容类型values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//e.设置联系人名字values.put(StructuredName.GIVEN_NAME, name);//f.向联系人URI添加联系人名字getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();/*-----------------------------------------------------*/values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);//g.设置联系人的电话号码values.put(Phone.NUMBER, phone);//h.设置电话类型values.put(Phone.TYPE, Phone.TYPE_MOBILE);//i.向联系人电话号码URI添加电话号码getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();/*-----------------------------------------------------*/values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);//j.设置联系人的E-mail地址values.put(Email.DATA, email);//k.设置该电子邮件的类型values.put(Email.TYPE, Email.TYPE_WORK);//l.向联系人E-mail URI添加E-mail数据getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);Toast.makeText(ContactProviderTest.this,"联系人数据添加成功", Toast.LENGTH_SHORT).show();}});}}
Android学习笔记十七.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider相关推荐
- Android学习笔记(十)——Activity的四种启动模式
Standard标准模式 每启动一个Activity就创建一个新的实例,不管这个activity之前是否启动过,都创建一个新的 singleTop栈顶复用模式 singleTask栈内复用模式 sin ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Android学习笔记(四九):通过Content Provider访问数据
在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过Content Provider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子.在这里我们不在充分描述相关UI ...
- Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)
Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...
- Android学习笔记21:ImageView获取网络图片
Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...
- Android学习笔记(七):多个Activity和Intent
根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...
- Android学习笔记26:图片切换控件ImageSwitcher的使用
在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...
- Pro Android学习笔记(二九):用户界面和控制(17):include和merge
xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...
最新文章
- 企业网络推广——企业网络有推广专员如何做好基本的网站优化布局
- Java开发SVM之Eclipse集成LibSVM示例
- Hystrix配置参数查找方式
- [转]JVM运行时内存结构
- 为什么中国天才都往美国跑,可美国人的数学那么槽糕
- Servlet读取文件的最好的方式
- AC日记——Mato的文件管理 bzoj 3289
- HomeBrew 更换为国内源--提高brew命令操作速度
- 高性能MySQL(第二版)第三章 架构优化和索引(上)——读书笔记
- NSTimer 的正确用法你真的知道吗?
- 编程十年 (6):虚荣的C
- JavaScript判断数组的方法
- 宏先生说:口罩和额温枪的套路!
- 【JZOJ1320】拯救奶牛
- grafana配置alert
- Linux系统启动分析
- STM32 ISP烧录过程
- 谭民机器人_机器人技术研究进展_谭民
- 世界级3D渲染大赛TOP3大佬们的制作流程大揭秘!
- LInux sed命令详解
热门文章
- 计算机应用基础在线3,计算机应用基础3(答案).doc
- 程序员真实从零开始实操 赚钱渠道之二 群控+极速版
- 2019南航计算机学院夏令营,2019南航年度人物宣讲丨计算机学院开展线上宣讲活动...
- pdf怎么分割成一页一页的文件?
- 网易惠惠购物助手:大数据实时更新框架概述
- drep:微生物基因组快速去冗余-文章解读+帮助文档+实战
- 个人常用多媒体软件方案
- 杰理AC692X---添加串口打印调试
- 浅谈IP数据报分片与重组
- MaskRcnn ImportError: _C.cpython-37m-x86_64-linux-gnu.so: undefined symbol:XXX