2019独角兽企业重金招聘Python工程师标准>>>

一. 了解 ContentProvider

1.   什么是ContentProvider

让开发者在多个应用中操作数据,如存储,修改删除 的唯一方式 ,一个ContentProvider 实现 了下面的接口。

ContentProvider.insert( Uri ,ContentValues )
ContentProvider.query (Uri ,String [] ,String ,String [], String )
ContentProvider.update(Uri .ConentValues .String ,String []);
ContentProvider.delete( Uri ,String .String );
ContentProvider.getType (Uri );

通过 这些接口,我们不用关心数据 的结构 。

2.   什么是URI

UUniversal Resources Identifier,在安卓 中,URI有三个部分

(1)  "content://"  ,开头

(2)  数据路径

(3)  ID ,可选 ,如果 不写,所有 的数据 。

content://contacts/peopel

很多常用 的URI安卓 已经定义也常量 。

3.ContentResolver

ContentProvider将数据暴露给外面,然后我们用ContentResolve得到数据 。相当 于是一个数据 的消费者,我们用  getContentResolver来得到当前 应用的ContentResolver对象 。

与ContentProvider一一对应,它有五个接口。

它们将以Cursor的形式返回结果 ,与数据 库相同。

二.  使用ContentProvider

系统的一些 程序 ,如联系人,通话记录等,往往作为 ContentProvider向外提供 数据 ,我们可以用managedQuery()方法很方便查询相关数据

1.联系人

三个步骤,我们在这里将Activity   extends ListActivity,重点突出ContentProvider的作用。

(1) 查询联系人,得到Cursor对象

managedQuery( Uri uri ,String [] projection ,String selection ,String [] selectionArgs ,String sortOrder)

projection: 要查询的数据 的属性。

(2)新建 一个Adapter

ListAdapter adapter = new SimpleCursorAdapter ( Context context ,int layout ,Cursor c ,String [] from ,int [] to );

(3) 设置Adapter

setListAdapter (adapter );

例子:

Cursor c = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);ListAdapter adapter = new SimpleCursorAdapter (getApplicationContext(), android.R.layout.simple_list_item_2, c, new String [] {ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER}, new int [] {android.R.id.text1,android.R.id.text2});setListAdapter (adapter);

在ContactsContract中,我们可以找到所有Contacts的信息。

最后要注意,读取联系人时,要的权限 。

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

2. 通话记录

和上面的相比 ,要改的是

Uri :CallLog.Calls.CONTENT_URI

还有两个属性: 号码,通话时间

如下:

Cursor c = managedQuery(CallLog.Calls.CONTENT_URI,null,null,null,null);ListAdapter adapter = new SimpleCursorAdapter (getApplicationContext(), android.R.layout.simple_list_item_2, c, new String [] {Calls.NUMBER,Calls.DURATION}, new int [] {android.R.id.text1,android.R.id.text2});setListAdapter (adapter);

3. 多媒体信息

4. 书签

三 .使用ContentResolver

外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

1. 删除 数据

首先,我们要得到ContentResolver 对象

ContentResolver resolver = getContentResolver();

使用delete

ContentResolver.delete (Uri  uri   ,String where ,String [] selectionArgs );

如要删除 所有 的联系人:

resolver.delete( Data.CONTENT_URI  ,null ,null );

如果要删除 名字为WES的,如下

resolver.delete (Data.CONTENT_URI ,StructuredName.DISPLAY_NAME +"=", new String [] {"WES"});

2. 查询数据

与数据库类似

ContentResolver.query (Uri  uri ,String [] projection ,String selection ,String [] SelectionArgs ,String sortOrder );

projection :要查询的属性。

如要查询所有人l,的信息。

resolver.query (ContactsContract.CommenDataKinds.Phone,CONTENT_URI , null ,null,null, null);

3. 更新数据

ContentResolver.update (Uri uri ,ContentValues values ,String where ,String [] selectionArgs );

如下例子:

values.put(StructruedName.DISPLAY_NAME ,"WES" );
resolver.update(Data.CONTENT_URI , values ,  StruacturedName.DISPLAY_NAME+ "=?", new String [] {"WES"});

4. 插入数据

这个 看起来很容易 ,但是实际 上很难。

ContentResolver .insert( Uri  uri ,ContentValues values );

暂时不写

转载于:https://my.oschina.net/chuiyuan/blog/226064

使用ContentProvider相关推荐

  1. ContentProvider是如何实现数据共享的

    ContentProvider用于跨进程通讯,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数据 ...

  2. ContentProvider访问问题

    问题解决一: 写了一个类,实现了ContentProvider,在清单文件中也注册了. <provider android:name=".provider.MyProvider&quo ...

  3. contentProvider的使用总结

    一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给 ...

  4. android 53 ContentProvider内容提供者

    ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...

  5. Android ContentProvider和getContentResolver

    安卓系统中的数据库SqlLite操作和java中mysql的数据库操作很不一样,造成这样的原因是因为在安卓中数据库是属于进程的不存在数据库客户端,也不存在数据库服务器. 关于SqlLite数据库的文章 ...

  6. 创建ContentProvider的详细步骤

    2019独角兽企业重金招聘Python工程师标准>>> Content Provider管理中央存储库的数据的访问, 你在Android程序中实现一个或者多个Provider, 连同 ...

  7. Android开发之ContentProvider结合LoaderManager加载数据(图文源代码分享)

    ContentProvider作为Android的四大存储方式之一,有着广泛的应用性,它暴露了数据地址,可以让其他应用访问数据,可以用于存储图片.通讯录等信息,这篇博文将详细介绍ContentProv ...

  8. Android Service、 BroadcastReceiver、ContentProvider ANR 原理详解

    Service ANR: 启动Service 的时候,会调用到ActiveServices 类的 realStartServiceLocked方法. private final void realSt ...

  9. ContentProvider使用场景解读

    为什么需要ContentProvider? 我们知道,一个软件系统的架构通常是这样的: 为了降低上层业务对底层数据的依赖,需要增加一个数据访问层来解耦,我们今天要说的ContentProvider充当 ...

最新文章

  1. 2018-3-15模式识别--学习笔记(一)
  2. python演变_简说Python生态系统的14年演变
  3. maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题
  4. 【学习笔记】3、Jupyter Notebook无法打开问题处理
  5. windows系统下实现Redis的配置与连接操作
  6. Css 特殊或不常用属性
  7. linux中自动挂载脚本,LIUNX一键自动挂载脚本,宝塔磁盘LIUNX一键分区磁盘 | 帮助信息-动天数据...
  8. 程序员的前20个搜索和排序算法面试问题
  9. 电脑打字学习_寒假就这样做!即不让孩子烦,还能让他有进步,开学就能迅速进入学习状态!...
  10. 《Reids 设计与实现》第十八章 事务
  11. 宏基因组多少钱一个样_离网式光伏发电系统费用一般是多少钱
  12. codeforces 796A Buying A House
  13. c++ 分页展示_django分页Paginator的简单使用
  14. 融云「音视频架构实践」技术专场【内含完整PPT】
  15. 黑苹果2k显示器开启hidpi_关于黑苹果固态硬盘4K对齐和Trim的开启
  16. 微信学习:我的学习测试环境(刚看我的DZd动力空间后台,发现推荐后双方有30软妹币福利,双赢哦)
  17. 吃白菜一样用micropython玩esp32(四)—— siri远程控制点灯
  18. 光模块字母含义及参数简称大全
  19. oracle查看表sql语句,oracle查看创造表的sql语句
  20. 每任务-苹果应用市场隐私政策

热门文章

  1. JEESZ架构、分布式服务:Dubbo+Zookeeper+Proxy+Restful
  2. AlwaysOn业务IP和高可用IP分开使用方案测试报告
  3. spring-session源码解读 sesion
  4. 【Shell脚本】逐行处理文本文件
  5. Tor 出口节点将运行在图书馆的电脑上
  6. 百度eCharts体验
  7. 图像滤波与OpenCV中的图像平滑处理
  8. linux进程调度浅析
  9. [转贴]NIOS II 软核中EPCS配置芯片的存储操作
  10. CSS实用方法 —— 三角形的编写