访问其他程序中的数据(ContentResolver的CRUD操作)

内容提供者(Content Provider)--跨程序共享数据 内容提供者简介 访问其他应用中的数据 ContentResolver 的基本用法 实例读取系统联系人 创建自己的内容提供器 创建内容提供器的步骤 创建新类继承ContentProvider并且重写其中6个方法 内容URI参数 使用UriMatcher实现匹配内容URI的功能 getType函数介绍 实现跨程序数据共享 内容提供者 访问自己创建的内容提供者数据 遇到的问题内容提供者简介 使用场景: 阅读详情

内容提供器的用法一般有两种:

1.使用现有的内容提供器来读取和操作相应程序中的数据

2.创建自己的内容提供器给我们程序的数据提供外部访问接口。

如果一个应用程序通过内容提供器对其数据提供了外部访问接口,那么任何其他的应用程序既可以对这部分数据进行访问。Android系统中自带的电话薄、短信、媒体库等程序都提供了类似的访问接口,这就使得第三方应用程序可以充分地利用这部分数据来实现更好的功能。

 

ContentResolver的基本用法

对于每一个应用程序来说,如果想要访问内容提供器中共享的数据,就一定要借助ContentResolver类,可以通过Context中的getContentResolver()方法获取到该类的实例。ContentResolver中提供了一系列的方法用于对数据进行CRUD操作,其中insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方法用于查询数据。这和SQLiteDatabase中的CRUD操作还是有点区别的。

不同于SQLiteDatabase,ContentResolver中的增删改查方法都是不接收表名参数的,而是使用一个Uri参数代替,这个参数被称为内容URI。内容URI给内容提供器中的数据建立了唯一标识符,它主要由两部分组成:authority和path。

authority:用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。比如某个程序的包名com.example.app,那么该程序对应的authority就可以命名为com.example.app.provider。

path:用于对同一应用程序中不同的表做区分的,通常都会添加到authority的后面。比如某个程序的数据库里存在两张表table1和table2,这时就可以将path分别命名为/table1和/table2,然后把authority和path进行组合,内容URI就变成了com.example.app.provider/table1和com.example.app.provider/table2。

不过,目前还很难辨别出这两个字符串就是两个内容URI,我们还需要在字符串的头部加上协议声明。因此,内容URI最标准的格式写法如下:

协议名://包名.provider/表名

例:

content://com.example.app.provider/table1

content://com.example.app.provider/table2

有没有发现,内容URI可以非常清楚地表达出我们想要访问哪个程序中的哪张表里的数据。也正因此,ContentResolver中的增删改查方法才都接收Uri对象作为参数,因为如果使用表名的话,系统将无法得知我们期望访问的是哪个应用程序里的表。

在得到了URI字符串之后,我们还需要将它解析成Uri对象才可以作为传入。

解析方法:

Uri uri=Uri.pare("content://com.example.app.provider/table1");

只需要调用Uri.parse()方法,就可以将内容URI字符串解析成Uri对象了。

现在我们就可以使用这个Uri对象来查询table1表中的数据了,代码如下所示:

Cursor cursor=getContentResolver().query(

uri,

projection,

selection,

selectionArgs,

sortOrder);

uri:指定查询某个应用程序下的某一张表

projection:指定查询的列名(select column1,column2)

selection:指定where的约束条件(where column = value)

selectionArgs:为where中的占位符提供具体的值

sortOrder:指定查询结果的排序方式(order by column1,column2)

查询完成后返回的仍然是一个Cursor对象,这时我们就可以将数据从Cursor对象中逐个读取出来了。读取的思路仍然是通过移动游标的位置来遍历Cursor的所有行,然后再取出每一行中相应列的数据,代码如下所示:

if(cursor != null){

       while(cursor.moveToNext()){
              String column1=cursor.getString(cursor.getColumnIndext("column1"));

              int column2=cursor.getInt(cursor.getColumnIndext("column2"));

        }
       cursor.close();

}

掌握了最难的查询操作,剩下的增删改操作就比较容易了。

增加数据:

ContentValues cv=new ContentValues();

cv.put("column1","text);

cv.put("column2",1);

getContentResolver().insert(uri,cv);

 

更新数据:

ContentValues cv=new ContentValues();

cv.put("column1","");

getContentResolver().update(uri,cv,"column1 = ? and column2 = ?",new String[]{"text","1"});

注意上述代码使用了selection和selectionArgs参数来对想要更新的数据进行约束,以防止所有的行都会受影响。

 

删除数据:

getContentResolver().delete(uri,"column2 = ?",new String[] {"1"});

这句话的意思是将column2列中,值为1的这一行数据给删除。

android四大组件之ContentProvider(内容提供器) 今天是2022年元旦,普天同庆的日子当然要记一篇优快云,又不是可以永远这么无忧无虑! 闲言少叙,直奔主题! ContentProvider主要用于在不同的程序之间实现数据共享的功能,这是android提供了一套完整的机制,允许一个程序访问另外一个程序中的数据,同时还保证被访数据安全性。 ContentProvider用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们的程序提供外部的数据共享接口 1.我们先通过访问android系统自带的电话簿 阅读详情

相关推荐

Android基础学习之ContentProvider

在实际开发中,我们可以根据具体的需求来设计和实现自己的ContentProvider,并在需要的时候注册到AndroidManifest.xml文件中。在上面的代码中,我们首先通过ContentResolver获取到MusicProvider的URI,然后指定需要查询的字段,最后调用query()方法进行查询。ContentProvider的作用可以类比为数据库中的表,它通过URI指定了要访问的表,并提供了一系列的CRUD操作(增删改查),使得其他应用程序可以方便地进行数据的读取和修改。

CodeRoarX的博客 142

contentProvider和contentResolver跨程序访问数据库

  步骤如下           1:在程序中创建数据库和表         2:给每一个表定制一个Uri链接标识        3:定义一个Uri   Uri.parse("content://" + Uri标识+ "/表名");        3:在contentProvider使用  static { matcher.addURI(Uri标识, "表名/#", STUDENT_WITH_I...

lhanwen的博客 609

android程序间数据的共享(ContentProvider和ContentResolver的使用)

安卓程序间数据共享的实现,包含两个程序,共享资源的程序和读取资源的程序,共享资源的程序包含了SQLite数据库的使用。

android ContentProvider读取其他应用数据库

android中,保存和读取数据数据的方式很多种,大致上有网络保存,内存记忆,文件保存和数据库保存。 而应用之间的数据库数据分享,读写,主要用到的便是ContentProvider. 为什么这么说呢? 如果能直接读取数据库文件的话会快很多,然而我们并没有直接读写数据库文件即****.db的权限,即便实在cmd命令下ls目录,也会直接提示 permission denied. 因为我

坚持,努力 5314

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 463

LTE随机接入实战:如何通过PRACH前导码优化小区覆盖半径(附计算公式)

本文深入探讨了LTE网络中PRACH前导码格式对小区覆盖半径的关键影响。通过解析不同前导码格式(如Format 0-3)的物理参数与覆盖能力,提供了核心计算公式与实战Python脚本,指导网络工程师根据覆盖需求、环境多径和容量等因素,科学选择前导码格式以优化边缘用户接入成功率,实现精准的网络规划与优化。

qq_27496129的博客 573

【Android入门到项目实战-- 6.2】—— 如何访问其他应用程序的数据?

Android--ContentResolver基本用法,如何访问其他应用程序中的数据?如读取电话联系人、短信等。

个人博客 1371

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2477

Android使用内容提供器(ContentProvider)访问和操作其他程序中的数据

假设我们有2个APP程序(GG和MM),我们想让GG去操作MM中的数据。第一步、在程序MM上自定义一个提供器MyProvider.javapackage com.t20.provider; import com.t20.sqlite.dao.BaseDao; import android.content.ContentProvider; import android.content.Conte...

美奇软件开发工作室 500

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

电机瞬态分析基础(2):理想电机的基本假设和正方向规定

电机瞬态分析基础之理想电机假设条件和正方向规定

weixin_45670943的博客 1145

ContentResolver——增、删、改(表)

本例中,对 表content://user_dictionary/words 的查询需要请求写入访问权限 即在manifest中添加 <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" /> 本例中contentResolver ---> 系统提供的contentProvider...

不止于代码 4409

SAP Gateway 中事务码 /IWFND/MAINT_SERVICE 的用法介绍

本文系统梳理了SAP Gateway中/IWFND/MAINT_SERVICE事务码的核心功能与运维实践。作为OData服务管理中樞,它支持服务注册激活、ICF节点配置、系统别名绑定、批量处理等关键操作。文章详解了服务目录、ICF节点、系统别名的配置要点,提供了批量激活、缓存清理、性能监控等实用技巧,并针对常见陷阱(如传输配置、删除残留)给出解决方案。通过制造业批量激活、零售业OAuth集成等案例,展示了事务码在企业级应用中的实际价值,为SAP Gateway运维提供了一套完整的治理清单。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 303

Android使用ContentResolver访问其他程序中的数据

Android使用ContentResolver访问其他程序中的数据

Android应用开发工程师 2493

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2172

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

内容解析器 ContentResolver

注:本文主要摘自developer.android.google.cn/(现在开发者文档里面大多数都有中文版,而且不需要翻墙) 如果有哪里错误,请务必指出,谢谢! 内容提供程序管理对中央数据存储区的访问。提供程序是 Android 应用的一部分,通常提供自己的 UI 来使用数据。 但是,内容提供程序主要旨在供其他应用使用,这些应用使用提供程序客户端对象来访问提供程序。 提供程序与提供程序客户端

Zero的博客 779

IEM模型,地表粗糙度模拟

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

Android高级应用2----ContentProvider(访问手机短信和通讯录数据)

在上一节《Android高级应用1----Service和AIDL》中有介绍过AIDL,作为服务进程间数据访问的接口,而对于像Android自带的SQLite数据库,如果其他的应用程序想要访问该数据库,进行CRUD,同样也需要数据接口,那么这个就是通过ContentProvider来实现,这个虽然在开发过程中,并不会用到太多,大多数是通过后台提供的数据接口来处理,但别忘记,ContentProvider也是Android的4大组件之一。 1、ContentProvider 1个应用程序想要为外界提供数据接口

qq_33235287的博客 1582

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 内容提供器---内容提供器基础(访问提供器) .

应用程序使用ContentResolver客户端对象访问来自客户端的数据。这个对象有一些与提供器中相同的命名的方法,提供器是ContentProvider的一个具体的子类的实例。ContentResolver对象的方法提供了基本的“CRUD”(创建、获取、更新和删除)持久化保存的功能。 在客户端应用程序的进程中的ContentResolver对象和提供器自己应用中的ContentProvider...

编程语言小筑 84

Android之ContentProvider跨程序共享数据入门(笔记一)

虽然真正做android开发也快将近一年了,但由于平时开发的内容的缘故,很多知识还是会因为没有用到而被忽略掉,所以最近重新翻回了当时的入门书籍《第一行代码》,发现有不少知识当时是看的一头雾水,现在理解能力多少有些提升了,可以再回来学习,把最基础的四大组件的知识巩固巩固。 以下笔记是我对书里的内容再加上自己的理解进行复述,因为有一种学习方法就是把学过的知识让自己以老师的身份讲出来,会让自己更好地掌

J.D.的博客 1098

5.3 ContentProvider使用全解

点此进入:从零快速构建APP系列目录导图点此进入:UI编程系列目录导图点此进入:四大组件系列目录导图点此进入:数据网络和线程系列目录导图本节例程下载地址: WillFlowContentProvider WillFlowProviderTest一、内容提供器简介内容提供程序管理一组共享的应用数据,用于在不同的应用程序之间实现数据共享的功能。它提供了一套完整的机制,允许一个程序访问另一个程序中的数

WillFlow的博客 1101

Android 内容提供器---内容提供器基础(访问提供器)

应用程序使用ContentResolver客户端对象访问来自客户端的数据。这个对象有一些与提供器中相同的命名的方法,提供器是ContentProvider的一个具体的子类的实例。ContentResolver对象的方法提供了基本的“CRUD”(创建、获取、更新和删除)持久化保存的功能。 在客户端应用程序的进程中的ContentResolver对象和提供器自己应用中的ContentProvider...

编程资料大全 179

Android内容提供程序

内容提供程序基础知识总结

Davidddl的博客 579

【Android】内容提供器

Android 四大组件之一,用于管理应用数据的。

2401_87463988的博客 1015

Android入门笔记(运行时权限与内容提供器)

1 运行时权限 在上几篇文章中,在访问系统的网络状态由于涉及到用户设备的安全性,所以需要使用权限声明,即在 AndroidManifest 中添加 uses-permission 标签,在添加了权限声明后,用户主要在以下两个方面得到保护: 如果用户在低于 6.0 系统的设备中安装该程序,会在该程序的安装界面上出现提醒,让用户从而决定是否安装该程序 安装程序之后,用户可以在应用程序管理界面中查看任...

KeePCoding 223
上一篇: (调用系统电话薄)运行时权限的基本使用
下一篇: 运行时权限+读取系统联系人
Android_牧
博客等级 码龄9年 88粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值