Android 应用程序之间数据共享—ContentProvider

(六)ContentProvider 实现数据共享 6.1 ContentProvider 概述 Content Provider 用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为在Android中没有提供所有应用共同访问的公共存储区域。 Content Provider内部如何保存数据由其设计者决定,但是所有的Content Provider都实现一组通用的方法, 用来提供数据的增、删、改、查功能。 客户端通常不会直接使用这些方法,大多数是通过ContentResolver对象实现对Content Provider的 阅读详情

转载:http://www.moandroid.com/?p=157

在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。那么如何将应用程序的数据暴露出去?

通过以前文章的学习,知道ContentResolver是通过ContentProvider来获取其他与应用程序共享的数据,那么ContentResolver与ContentProvider的接口应该差不多的。

其中ContentProvider负责

  • 组织应用程序的数据;
  • 向其他应用程序提供数据;

ContentResolver则负责

  • 获取ContentProvider提供的数据;
  • 修改/添加/删除更新数据等;

ContentProvider 是如何向外界提供数据的?

Android提供了ContentProvider,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。至于如何从URI中识别出外界需要的是哪个“数据库”,这就是Android底层需要做的事情了,不在此详细说。简要分析下ContentProvider向外界提供数据操作的接口:

query(Uri, String[], String, String[], String)

insert(Uri, ContentValues)

update(Uri, ContentValues, String, String[])

delete(Uri, String, String[])

这些操作与数据库的操作基本上完全一样,在此不详细说,具体的解析可以参考Android Sqlite解析篇中的详细说明。需要特殊说明的地方是URI:

URI

在URI的D部分可能包含一个_ID ,这个应该出现在SQL语句中的,可以以种特殊的方式出现,这就要求我们在提供数据的时候,需要来额外关注这个特殊的信息。Android  SDK推荐的方法是:在提供数据表字段中包含一个ID,在创建表时INTEGER PRIMARY KEY AUTOINCREMENT标识此ID字段。

ContentProvider 是如何组织数据的?

组织数据主要包括:存储数据,读取数据,以数据库的方式暴露数据。数据的存储需要根据设计的需求,选择合适的存储结构,首选数据库,当然也可以选择本地其他文件,甚至可以是网络上的数据。数据的读取,以数据库的方式暴露数据这就要求,无论数据是如何存储的,数据最后必须以数据的方式访问。

可能还有2个问题,是需要关注的。

  1. ContentProvider是什么时候创建的,是谁创建的?访问某个应用程序共享的数据,是否需要启动这个应用程序?这个问题在Android SDK中没有明确说明,但是从数据共享的角度出发,ContentProvider应该是Android在系统启动时就创建了,否则就谈不上数据共享了。这就要求在AndroidManifest.XML中使用<provider>元素明确定义。
  2. 可能会有多个程序同时通过ContentResolver访问一个ContentProvider,会不会导致像数据库那样的“脏数据”?这个问题一方面需要数据库访问的同步,尤其是数据写入的同步,在AndroidManifest.XML中定义ContentProvider的时候,需要考虑是<provider>元素multiprocess属性的值;另外一方面Android在ContentResolver中提供了notifyChange()接口,在数据改变时会通知其他ContentObserver,这个地方应该使用了观察者模式,在ContentResolver中应该有一些类似register,unregister的接口。

至此,已经对ContentProvider提供了比较全面的分析,至于如何创建ContentProvider,可通过2种方法:创建一个属于你自己的ContentProvider或者将你的数据添加到一个已经存在的ContentProvider中,当然前提是有相同数据类型并且有写入Content provider的权限。在Android SDK的sample中提供的Notepad具体实例中去看源代码!

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps 香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题 阅读详情

相关推荐

WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化

判断需要提取的变量与诊断量确定后,使用getvar函数进行提取。可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。判断绘图类型所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。1D点线图:ll_to_xy interpline2D填色图:interplevel3D剖面图:vinterp vertcross绘图、美化色标、XY轴、标签的设置等等。

weixin_43750300的博客 1万+

Android应用安全之Content Provider安全

android平台提供了Content Provider,将一个应用程序的指定数据集提供给其它应用程序。这些数据可以存储在文件系统、SQLite数据库中,或以任何其它合理的方式存储。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。 Content Provider通过URI(统一资源定位符)来访问数据,URI可以理解为访问数据的唯一地址。 限制app对敏感Con...

weixin_33682790的博客 711

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

【20】应用开发——Android运行时权限&&通过ContentProvider实现程序之间的数据共享

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能。它允许一个程序访问另一个程序中的数据,同时还可以保证被访问数据的安全性。

熊熊饲养员的优快云! 1492

jQuery 版本怎么选?别一上来就用最新版,老项目里这个坑很常见

jQuery 是一个封装好的 JavaScript 函数库,简称 JQ它的核心理念是jQuery 有 1.x、2.x、3.x 三个主要版本系列2.0 以上版本不再支持 IE6、IE7、IE8版本选择不能只看“新不新”,而要看项目兼容性和实际需求.min.js是压缩版文件,生产环境常用使用 jQuery 前必须先通过<script>正确引入基本就是没引入或引入失败可以快速绑定点击事件.animate()可以快速实现动画效果,但定位属性要设置好。

Web安全工具库 398

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 138

Content Providers--概述

Content Providers 管理应用如何去访问一组结构化的数据,把数据压缩并为之提供安全机制。Content Providers 是一个固定的接口使两个进程之间的数据能够共享,当你想访问一个content provider提供的数据时,你可以在你的应用中使用ContentRessolver对象去和它交流,content provider接收你应用中ContentRessolver对象传过来

Tibib的专栏 1031

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 706

Android 应用程序之间数据共享 - ContentProvider

在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。那么如何将应用程序的数据暴露出去? 通过以前文章的学习,知道ContentResolver是通过

liuwise的专栏 706

CANoe之UDS诊断自动化测试(四):创建诊断自定义Panel发送诊断(替代Session Control窗口)

通过自定义的Panel界面实现诊断发送的功能,并且还可以根据自己的测试需求添加需要的诊断信息,使用非常灵活。

weixin_69677286的博客 1904

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 151

Android 应用程序之间数据共享—ContentProvider 保时被访问

<br />在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。那么如何将应用程序的数据暴露出去?<br />通过以前文章的学习,知道ContentResolver是通过ContentProvider来获取其他与应用程序共享的数据,那么ContentResolver

xiao229404041的专栏 1252

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 445

Android 应用程序之间数据共享—ContentResolver与ContentProvider

Android是如何实现应用程序之间数据共享的?一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的数据是如何存储的,或者是使用数据库还是使用文件,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道,例如:添加(insert)、删除(delete)、查询(query)、修改(update),当然需要一定的权限才...

foozhe2000的专栏 346

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

(转)Android 应用程序之间数据共享—ContentProvider

Android 应用程序之间数据共享—ContentProvider By: 海市蜃楼 | In: Android开发 在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据,通过它可以让所有的应用

gxj1680的专栏 454

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Android 应用程序之间数据共享—ContentResolver
下一篇: ContentProvider与ContentResolver使用
GaoJava08
博客等级 码龄18年 201粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值