内容提供者ContentProvider

Android之内容提供者(ContentProvider) 内容提供者(ContentProvider)是Android四大组件之一,用于在不同应用之间共享数据。内容提供者通过统一资源标识符(URI)来标识数据,并使用一套标准的接口来访问和操作数据。它是Android系统中实现跨应用数据共享的主要方式。 阅读详情

作 用:把应用本身的私有数据提供给其他应用使用。
产生原因:一般应用的私有数据(数据库等)不能被其应用访问,但是如音频、视频、图片和通讯录联系人、短信等数据,要用第三方APP备份或者读取使用时就有冲突,所以就产生了内容提供者ContentProvider,它向其他的应用提供了访问自己私有数据的方式。

这里写图片描述

一、让A应用中包含内容提供者,给其他应用提供访问方式。

1. 在A应用中,自定义一个类继承ContentProvider,重写其中的“增、删、改、查”方法。

public class TestProvider extends ContentProvider {
    private MyOpenHelper myOpenHelper;
    private SQLiteDatabase writableDatabase;
    /**
     * 实现这个方法是为了在启动时初始化ContentProvider,当这个应用的主线程启动时,在这个应用中所有注册了ContentProvider的类
     * ,都会调用这个onCreate方法,它不能执行冗长的操作,否则应用程序启动将被延迟。
     */
    @Override
    public boolean onCreate() {
        myOpenHelper = new MyOpenHelper(getContext());//创建一个数据库对象。参数:getContext()
        writableDatabase = myOpenHelper.getWritableDatabase();//创建和/或打开一个可以用于阅读和写作的数据库对象
        return false;
    }
    /**
     * 其他应用访问该应用时调用本方法
     * Uri  代表本应用的主机名,这需要其他应用来指定本应用的主机名
     * ContentValues 代表要插入的数据,这需要其他应用来传入数据
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // 负责向该应用的数据库中插入数据
        writableDatabase.insert("tableName", null, values);// tableName数据库表名
        return null;
    }
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // 负责从本应用的数据库中删除数据
        return 0;
    }
    @Override
    public String getType(Uri uri) {
        // 获得数据类型
        return null;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        // 负责从该应用的数据库中查询数据
        return null;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        // 负责更新本应用的数据库时调用
        return 0;
    }
}

2.在配置清单文件时,需要指定主机名authorities。

2.1 安卓四大组件都需要在清单文件中配置,内容提供者需要在清单文件中注册。因为这四类组件都不是我们去创建的,我们只是extends他们,最终都是交给系统去执行的,ContentProvider是4大组件中唯一的不需要意图(intent)的组件,Activity的启动要意图,services的启动需要意图,广播的发送需要意图。
2.2 需要配置主机名,即访问地址。因为每个应用的私有数据库都有一个与之对应的内容提供者,来给其他应用提供访问这个APP的私有数据库的方式,也就是说在手机中有很多个内容提供者,必须通过主机名来区分,让其他应用能准确找到并访问这个数据库。
2.3 位置在<application>标签里,和<activity>处于同级。

<provider
            android:name="com.watom.www.TestProvider "
            android:authorities="com.watom.person"<!--作为一个标记或者地址,让其他APP可以准确访问这个ContentProvider-->
            android:exported="true" <!--可以从数据库中查询到数据-->
      >
</provider>

二、让B应用通过内容提供者,来操作A应用里面的私有数据(数据库)。

在B应用中的某位置,用ContentResolver提供的方法来操作A应用的数据,A和B的这些方法相互对应,如下:

        //为本应用获取ContentResolver实例对象
        ContentResolver resolver = getContentResolver();    
         
        //设置需要插入的数据
        ContentValues values = new ContentValues();
        values.put("name", "王五");//根据数据库表插入数据
        values.put("age", "19");
        //这个insert方法会去访问内容提供者的insert方法 
        resolver.insert(Uri.parse("content://com.watom.person/person"), values);
        //插入另一条数据
        values.clear();  //清除values的内容
        values.put("name", "张三");
        values.put("age", "20");
        resolver.insert(Uri.parse("content://com.watom.person/person"), values);  

这里写图片描述

微信小程序启用蓝牙设备特征值变化时的notify功能 注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。 阅读详情

相关推荐

2024高项范文-论项目成本管理

例如,在需求分析和设计阶段,安排了较多经验丰富的人员,确保基础工作的高质量完成,同时也避免了后续因需求变更等问题导致的时间和成本浪费。虽然项目进度略有延迟,但通过有效的成本管理和调整,最终在可控的成本范围内完成了项目,并且软件的质量也得到了保障。通过这个案例可以看出,在项目成本管理过程中,要紧密结合时间管理,根据实际情况灵活调整策略,注重风险的防范和应对,才能实现时间和成本的平衡,确保项目的成功。资源规划是成本基准形成的基础。识别和评估项目中的成本风险,并制定相应的应对措施,以降低风险对项目成本的影响。

xjflion的博客 1188

安卓复习题(二):Activity、数据存储、ContentProvider【自用】

Activity 单选题 下列方法中,Activity从其东到关闭不会执行的是()D A、onCreate() B、onStart() C、onResume() D、onRestart() 解析: Activity开始启动时会执行A->B->C,C就是获得聚焦时候(也可以通俗理解为在你看得到的最前面),而D只有在后台程序切换回前台时候才会执行 startActivityForResult()方法接收两个参数,第一个是Intent,第二个是()C A、resultCode B、reques

qizong007的博客 2680

高光谱知识(1)-高光谱成像技术的理解

系列文章目录 高光谱技术可以获得待观测目标或场景的连续单色光谱图像,并通过空间维(x, y)数据和光谱维(λ)数据共同组成三维观测数据立方体,从而为研究人员提供探测目标或场景中的每一个点的空间和光谱特征细节。这种兼具相机的高分辨成像能力和光谱仪的高光谱分辨能力使得高光谱被广泛应用于测绘遥感、目标识别、环境监测与评估、临床影像诊断、过程监控等任务中,并在地理、空间、海洋、气候、大气、农业、植被、生态、医药、安防、制造与色度等多个领域中发挥巨大作用。 文章目录系列文章目录前言一、按获取数据的过程划分二、按照光

Echo_Code的博客 1万+

android四大组件之ContentProvider

目录: 一contentProvider的介绍 二自定义contentProvider的过程 三访问自定义contentProvidre的内容 四例子(获取系统短信和插入系统短信): 五例子(获取系统联系人和插入系统联系人) 六自定义内容观察者 ----------------------------------------------------------------------------------------------------------------------------

qindong123412的专栏 5035

STM32F407用FSMC+DMA驱动LVGL,3.5寸屏流畅度翻倍实战(附CubeMX配置避坑)

本文详细介绍了如何在STM32F407上通过FSMC+DMA驱动LVGL,显著提升3.5寸屏的显示流畅度。从FSMC与DMA的配置原理到LVGL驱动层适配,提供了完整的优化方案和实测数据,帮助开发者解决界面卡顿问题,实现流畅度翻倍的效果。

weixin_30872499的博客 559

西电微原课设——矩阵式键盘数字密码锁设计

内容要求:根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。...

Polaris的博客 1万+

Android中由于ContentProvider导致的“应用组件的命名与已安装应用有冲突”问题

关于 :Android中由于ContentProvider导致的“应用组件的命名与已安装应用有冲突”问题,该问题的说明参照原址:https://blog.youkuaiyun.com/black_bird_cn/article/details/79504487在此处我说说自己当时遇见该问题使用的处理方式。在项目开发中,我接到需求,要求出一个中文版无SDK apk 和有SDK apk,我当时也很快把这两个包打出...

AnotherQuiet的博客 4430

基于多智能体深度强化学习的空地协同通信系统轨迹设计与访问控制

所属子方向: UAV assisted communication 名词注释 coordinated:协调、协同 base stations 基站,公用移动通信基站,是移动设备接入互联网的接口设备,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。 UAV-BS:无人机基站 cooperative-competitive game:合作竞争博弈 throughput :吞吐量,每秒比特数 bps,bits per second Determinis

skysys的研究小屋 4969

ContentProvider内容提供者的使用

ContentProvider内容提供者的使用ContentProvider 的介绍和使用ContentProvider介绍ContentProvider机制进程内数据共享自定义ContentProvider自定义权限 ContentProvider 的介绍和使用 ContentProvider介绍 就是给其他的应用程序,提供一个访问我们sqlite的文件的机会. 因为涉及到数据的安全,才有了提...

weixin_45375472的博客 525

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 763

YOLO26改进策略【Neck】| 关键点检测:SDFM 表层细节融合模块,利用通道-空间注意力机制,实现深层与浅层特征融合,抑制噪声干扰

本文记录的是利用SDFM 模块改进 YOLO26 的颈部融合部分,专门用于关键点检测。SDFM模块(Surface Detail Fusion Module,表层细节融合模块) 通过在特征提取网络的浅层引入通道-空间注意力机制,动态生成深层与浅层特征融合权重。该模块可自适应保留不同模态中的独特信息,抑制背景噪声与光照干扰,实现低层细节的精准对齐与互补增强,为后续检测提供高保真度的底层特征表示,从而提升模型在复杂场景下的目标检测鲁棒性与定位准确性。Rethinking the necessity of ima

Limiiiing的博客 175

android 多个Provider属性冲突

Android 中的多个 Provider 属性冲突:概述与解决方案 在Android开发中,Content Provider(内容提供者)是一种重要的数据存储与共享机制。然在使用Content Provider的过程中,尤其是定义多个Provider时,可能会出现属性冲突的问题。本文将为您解读AndroidManifes...

weixin_36840939的博客 550

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7237

ContentProvider内容提供者

1.首先需要一个自己的数据库 2.写内容提供者继承自ContentProvider package com.example.appa; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; //写...

alaleidd的博客 135

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android 第5讲:内容提供者ContentProvider

Android内容提供者

weixin_47323733的博客 2939

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

第十天 ContentProvider内容提供者的使用

ContentProvider内容提供者的使用一、ContentProvider 的介绍和使用二、自定义ContentProvider1.什么是自定义内容提供者2.思路:3.提供者代码三、其余 一、ContentProvider 的介绍和使用 需要导入注解的包 :implementation ‘androidx.annotation:annotation:+’ 介绍 其实呢,内容提供者很好理解,就...

qq_45272980的博客 365

Android自助餐之内容提供者ContentProvider使用

Android自助餐之内容提供者ContentProvider使用Android自助餐之内容提供者ContentProvider使用 下载完整源代码 创建提供者Module 创建内容使用者Module 下载完整源代码创建提供者Module此例中Module为SampleOfContentProvider 创建Provider类 此例中类名InfoProvider 在Manifest中声明 <

CodeMan 1514

Android中内容提供者ContentProvider的使用

内容提供者是安卓四大组件之一。 如果a应用想把自己的数据库暴露给别的应用程序使用,就必须实现contentprovider 。 创建一个类 继承系统的ContentProvider一定要在清单文件里面配置 放入application结点下。(作为一个组件) 指定uri的主机名com.example.provider.personprovider。 <provider a

jiangyudi0831的专栏 419

ContentProvider——内容提供者

今天,我们来说一下关于android四大组件之一的ContentProvider的创建以及使用 首先,我们先来了解一下ContentProvider。 ContentProvider在android中俗称为内容提供者,主要作用是可以操作其他的应用程序,也可以进行实现应用之间的数据共享。 在例如微信,QQ等App内,我们都会发现有一个匹配当前通讯录的功能,其实,这就是ContentProvider的...

weixin_45189502的博客 337

Android 内容提供者ContentProvider

Content Provider内容提供者是 Android 应用程序的主要构建块之一,为应用程序提供内容。它们封装数据并通过单一接口将其提供给应用程序 。仅当您需要在多个应用程序之间共享数据时才需要内容提供程序。例如,联系人数据由多个应用程序使用,并且必须存储在内容提供程序中。如果您不需要在多个应用程序之间共享数据,您可以直接通过.当通过 a 发出请求时,系统会检查给定 URI 的权限,并将请求传递给向该权限注册的内容提供者。内容提供者可以随心所欲地解释 URI 的其余部分。该类有助于解析 URI。需要实

baipenggui_bo 715

内容提供者ContentProvider 初解

内容提供者 ContentProvider 2.作用:应用的数据库是不允许其他应用访问的,内容提供者的作用就是让别的应用访问到你的数据库。其是存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据(不同的进程中实现数据共享);特点:Android四大组件之一,需要在 清单文件AndroidManifest.xml中进行注册 注意事项: Uri : 自定义的 内容提供者 其主机名 为内

hyl411136528的博客 575

ContentProvider 内容提供者

1.1.  什么是内容提供者   内容提供者是Android中的四大组件之一,可以将应用中的数据对外进行共享   内容提供者将数据的访问方式统一,不必针对不同数据类型采取不同的访问策略   内容提供者将数据封装,只暴露出我们希望提供给其他程序的数据   内容提供者中数据更改可被监听   1.2.  创建内容提供者    定义类继承ContentProvider

xiabo852105的专栏 3765

内容提供者ContentProvider简单总结

内容提供者是Android四大组件之一 内容提供者的作用是跨APP操作、访问数据库 1.自定义类继承自 ContentProvider 实现ContentProvider要重写6个方法 public class MyContentProvider extends ContentProvider { MyOpenHelper myOpenHelper; SQLiteDatabase database; @Override public boolean onCreate

Ideal_of_life的博客 269

内容提供者 ContentProvider

概念 内容提供者管理对中央数据存储区(结构化数据集)的访问。通常是其他应用通过内容提供者对应用的数据访问。通常情况下如果不需要与其他应用共享数据,就不需要使用内容提供者。 内容提供者通过一个或多个表(对sqlite的封装)的形式将数据呈现给外部应用。对数据的增删改查与sqlite数据库基本一致。 URl 用于标识数据的URl,包括内容提供者的名字(唯一标识、授权)的一个指向表的名称(路

fengfancky的博客 406

Day10 ContentProvider内容提供者的使用

ContentProvider内容提供者的使用介绍思路代码展示自定义权限 介绍 1、ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。 2、三个重点 (1) contentProvider 内容提供者 (2) contentResolve 内容解析者 (3) uri 地址 简单的理解:内容提供者提供一个地址,内容解析者把uri解析一下,去指向提...

huang_one_jun的博客 290

ContentProvider内容提供者 数据库工具类

Android工程搭建1、ContentProvidera.ContentProvider介绍2、原理图URI数据库工具类 1、ContentProvider a.ContentProvider介绍 1.ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。 2.技能get点: (a)访问系统自带的内容提供者(******) 手机联系人/音频/视频...

XinHao_Sir的博客 554
上一篇: 使用Git分布式版本控制系统
下一篇: 反编译
@海~涛
博客等级 码龄14年 574粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值