【Android 开发】:Content Provider (内容提供者) 详解

本文详细介绍了Android中的Content Provider,包括其作用、创建条件、所需知识,以及提供了具体的代码实现和程序运行效果展示,旨在帮助开发者更好地理解和使用Content Provider进行数据存储和共享。
摘要由CSDN通过智能技术生成

1. Content Providers 介绍

    Content Providers 管理访问结构化的数据集。它们可以封装这些数据,并且为定义安全的数据提供机制。Content providers 是标准的接口,它能将一个线程中的数据与其他线程中的运行的代码进行连接。也就是说 Content providers 支持跨应用间的访问。
    当你想要在 Content provider[内容提供者] 中访问数据,你要在你的应用程序的 Context 中使用 ContentResolver[内容解析者] 对象与 provider 进行连接作为客户端[通过 Cotext中getContentResolver()方法] 。这个ContentResolver 会与provider对象进行连接,provider 它是一个继承Content provider的类的实例。provide这个对象会接受从客户端请求的数据,执行请求动作,返回结果。
    如果你不打算将自己的数据分享给其他应用程序,就不必要开发自己的 内容提供者[提供者], 然而你想要在你的应用程序中提供自定义的搜索建议你需要开发内容提供者,如果你想要复制数据或者文件到其它应用程序,你就需要拥有自己的 provider 。
    Android自己提供了一个 content providers 来管理数据,如果 音频,视频,或者个人信息等。你可以在 android.provider 包中查看,这些提供者可以给任何应用程序所访问。
    Contacts Provider http://developer.android.com/guide/topics/providers/contacts-provider.html

2. 如何创建一个内容提供者

1) 什么时候决定创建一个内容提供者呢?

1). 你需要提供完整的数据和文件给其他的应用程序.
2). 你想要允许用户从你的应用程序复制完整的数据到其他的应用程序
3). 你想要使用搜索框架来提供自定义的搜索建议。

2) 创建内容提供者需要掌握的知识

1). 自定义一个内容提供者供别的应用程序去访问,Content provider 是基于数据库的,它在外层封装了有一套非常规范的增删查改的操作数据库的对外接口,如下图所示

2). 查看API文档中 ContentProvider 类的说明,可以发现这是一个抽象类  
   Content providers是Android应用程序中主要的组成部分之一,为应用程序提供对外的内容,它封装了数据然后提供给那些通过简单 ContentResolver接口的应用程序,这些数据是可以跨应用访问的。
   对与解析者来说,它会通过 ContentResolver 会发出一个请求,这个请求是否通过是通过去检查由系统给予的 URI 的授权,授权是由 content provider 注册的,在AndroidMainifest.xml 中去注册这种授权。UriMatcher 类可以帮助解析 URI.[也就是通过这个类去匹配URI,详细参考第5点 ]

   在这里为什么要注册 URI授权呢?
   原因是一个应用程序中可以有多个 content provider, 但是每一个content provider 的授权都是唯一的,所以内容解析者可以通过这种URL的授权来找到自己想要的 content provider. 这里的 URI 的授权也可以理解为content provider对外的一个访问的路径
3). 注意定义好一个内容提供者之后需要在 AndroidMainifest.xml 中注册
   android:authorities 授权属性,表示外部应用程序访问当前内容提供者的标示符,它是自定义的,一般我们是以 "包名 + 类名" 的形式来定义的。有些人可以理解为 URI 路径
4). 查看 UriMatcher 类的概要描述  
   这是一个在 content provider 中帮助匹配  URIs 的实用类。
   查看 public void addURI (String authority, String path, int code)方法
   这个方法是用来表示在  content provider 里面添加外部对其的匹配的规则,当 URI 被匹配的时候,就会返回 code 码, URI节点可以精确的匹配字符串, "*" 号匹配任何的字符串 "#" 号只能匹配数字。[比如删除一条记录中 ID 往往是数字]
   参数说明
   authority : 授权, 就是 AndroidMainifest.xml 中的授权
   path
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值