ContentProvider

本文详细介绍了Android中的ContentProvider组件,包括其用途、实现步骤及如何设计数据存储等内容。此外,还提供了实现ContentProvider的具体方法说明及其在Android应用中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Content provider管理android以结构化方式存放的数据。他以相对安全的方式封装数据并且提供简易的处理机制。Content provider提供不同进程间数据交互的标准化接口。
当你准备取出content provider中的数据时,你需要获得一个和当前上下文相关的ContentResolver对象作为客户端。这个对象和一个继承至ContentProvider的provider对象相关联。provider从客户端接收请求并且返回结果。
如果你不准备和其他应用共享你的数据,你不需要自定义provider。但是,你需要实现provider以满足个性化搜索数据的需求。同时,当你拷贝和粘贴复杂数据或者文件到他人应用中时,也需要provider。
延伸阅读:

继承关系


当使用它时,需要实现如下方法:

什么情况下使用content provider

  • 提供复杂的数据或文件给其它应用程序
  • 允许使用者复制复杂的数据到其它app
  • 提供在搜索协议框架下的自定义搜索

建立provider

  • 为你的数据设计存储结构【文件类型||结构体类型】
  • 实现一个继承自ContentProvider的类和必要方法。此类作为数据与安卓系统之间的接口
  • 定义一个String【content URI】,它包含其内容的uri和列名。如果您希望供应商的应用程序来处理intents,还定义intents的actions, extras data, and flags.还需要声明权限。为此,应该用一个类来承载这些值

如何设计数据存储

content provider是一个存储结构化数据的接口,在创建接口它之前,你需要决定如何存储数据,你可以将数据存储为任何你想要的形式,还可以为其设计读写接口。
在安卓上可用的数据存储技术:SQLite、file
几点建议:
表格数据应该有主键( primary key )
如果需要存储图片或其他十分大的文件,将它的路径存入表中
Binary Large OBject (BLOB)  存储不同大小或结构的数据,例如 protocol 或json

设计content URI

content://<authority>/<path>/<id>  
content uri用于鉴别provider中的数据,它包括provider的名称和表名(文件名),可选的id部分指向表中单独的一行。在ContentProvider中的所有的数据访问函数都需要content uri作为参数,以便于确定访问的表、行、或者文件。
  • 所有者名称(authority):为避免冲突,命名规则遵循包名的命名规则,com.example.<appname>.provider.
  • 路径名(path):com.example.<appname>.provider/table1 and com.example.<appname>.provider/table2.
  • ID:加在uri的末尾content://com.example.app.provider/table3/1 
UriMatcher  或 ContentUris提供类对uri更为方便的操作

实现ContentProvider

该ContentProvider的实例,管理结构化数据集,通过 其他应用程序的处理请求。所有的访问形式最终都需要调用 ContentResolver然后调用的ContentProvider的具体方法来获取许可。
需覆盖开头所说的几个方法

实现query()

  • 必须返回一个游标对象(Cursor )或者抛出错误。
  • 使用了数据库存储数据,那么会很轻松的返回游标对象。
  • 查询结果为空也应该返回游标,同时在getCount() 中应该返回0。
  • 在查询过程中发生内部错误,返回null。
  • 如果不是使用数据库,使用一个Cursor的子类

实现insert()

  • 该方法主要用于向表中插入数据, 值由参数ContentValues提供。如果列名没有指定相应的值,则应该提供一个默认值。
  • 该方法返回一个content URI,该uri指向新添加的行

实现delete()

  • 该方法并没有在物理上删除数据。
  • 如果您使用了同步适配器,你应该考虑标记需要删除的行以“删除”标志,而不是真的删除的行。
  • 同步适配器可以检查删除的行,并在供应商删除之前从服务器上删除它们。

实现update() 

ContentValues  提供值, selection selectionArgs选中和删除值,这可能会重用上面三个方法的代码。

实现onCreate()

安卓主线程直接调用,因此应该在此方法仅执行快速运转的初始化任务,并推迟数据库创建和数据加载,直到提供实际接收的数据的请求。

MIME Types

通过一个content uri来描述数据的类型
ContentProvider  中,有两个方法返回 MIME types: getType()getStreamTypes()
构成:
类型: vnd
亚类型:单行  android.cursor. item /
              多行 android.cursor. dir /
专用部分: vnd.<name> . <type>
name建议用公司名称或者包名,type建议用表名
一个完整的示例
vnd.android.cursor.dir/vnd.com.example.provider.table1

实现承载类

必须声明为 public final
包含URIs, 列名, MIME types, 和其它属于 provider 的元数据
官方示例  ContactsContract

provider标签元素

使用该标签在 manifest  文件中声明一个provider,该标签包含以下信息
Authority (所有者名称)
Provider class name
Permissions
启动和控制属性
信息属性


Intents and Data Access

应用程序可以用一个Intent间接访问content provider, 应用程序不调用任何ContentResolver的或ContentProvider的方法。 相反,它会发送一个启动活动的intent,这往往是应用程序自己的provider。目标activity负责在ui上检索和显示数据。取决于在action中的intent,目标activity也可以提示用户更改provider提供的数据。在intent. extras方法中的数据会显示在ui界面上,用户可在provider修改这些数据之前修改它。
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 《一芯量产工具 FirstChip MpTools 20211024 详解及应用》 在数字存储领域,U 盘作为便携式存储设备的典型代表,其稳定性和可靠性极为关键。而 “FirstChip_MpTools_20211024” 正是专为一芯(FirstChip)芯片打造的 U 盘量产工具,主要用于 FC1178 和 FC1179 系列芯片的 U 盘生产、测试与修复工作。本文将深入剖析该工具的功能、使用方法以及其在 U 盘量产过程中的重要作用。 一芯(FirstChip)是一家专注于存储控制器研发的企业,其 FC1178 和 FC1179 芯片被广泛应用于众多 U 盘产品中。这些芯片具备高性能、低功耗以及高兼容性等诸多优点,但在少数情况下,也可能会出现诸如数据丢失、无法识别等故障,此时就需要借助专业的量产工具来进行修复。 “FirstChip MpTools” 是一款功能强大的一芯 U 盘量产管理软件,具备以下功能:一是进行初始化与格式化操作,能够清除 U 盘中的所有数据,并且可以设置不同的文件系统格式,比如 FAT32、NTFS 或 exFAT,以满足不同用户的多样化需求;二是开展性能测试,通过读写速度测试来评估 U 盘的实际性能,帮助用户判断 U 盘的读写速度是否达到了预期的标准;三是进行坏块检测与修复,扫描 U 盘中可能存在的坏块,并尝试对其进行修复,从而确保 U 盘能够稳定运行;四是实现容量调整,允许用户根据实际需求对 U 盘的可用容量进行调整,在处理扩容盘或者修复容量异常的 U 盘时极为实用;五是进行安全擦除,能够彻底删除 U 盘上的所有数据,确保信息安全无虞;六是开展固件升级,对 U 盘的固件进行更新,以此提高兼容性、修复已知问题或者解锁新的功能。 使用 “FirstChip M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值