Android之ContentProvide(内容提供者)

ANR源码分析之ContentProviderClient Timeout 在上篇文章中,分析了Service Timeout的过程。这篇文章将继续分析ContentProviderClient Timeout的流程。当使用ContentProviderClient执行Provider相关操作时,会设定一个超时时间,如果在指定的超时时间内,没有完成操作,则会产生一个ANR。ContentProviderClient Timeout整体的流程如下: 1.acqui 阅读详情
ContentProvider使用方法。
ContentProvide的使用涉及ContentProvider、 ContentObserver、 ContentReslover 、ContentValues、Cursor、Uri、UriMatcher以及数据库等。
content Provider。它最大的特点是可以在应用之间共享数据
1.定义自己的ContentProvide类,
2.在AndroidManifest.xml上注册,并指定authorities属性,给外界提供固定Uri对外提供服务
提供的方法
操作方法:insert、getType、delete、query、update、oncreate用于创建数据库或链接数据库,以及提供为contentResolver增删改查的方法。

ContentValues是用于存储ContentResolver处理的值。

ContentResolver用于访问content模型,其实就是访问和操作contentprovider。
实现方式:Context提供了getContentResolver方法,这表明Activity、Service组件都可通过该方法获取该类的实例
ContentResolver提供的操作方法:insert、getType、delete、query、update等与ProvideContent相对应,通过Uri链接ContentProvide和ContentResolver
Cursor类,游标。应用时一般通过查询query得到。
Uri:协议部分、域名、路径、ID、字段
其中协议部分:content://
域名对应authoties属性

路径:资源部分或数据部分

ContentProvider示例:

package org.crazyit.content;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;

public class FirstProvider extends ContentProvider
{
	// 第一次创建该ContentProvider时调用该方法
	@Override
	public boolean onCreate()
	{
		System.out.println("===onCreate方法被调用===");
		return true;
	}

	// 该方法的返回值代表了该ContentProvider所提供数据的MIME类型
	@Override
	public String getType(Uri uri)
	{
		System.out.println("~~getType方法被调用~~");
		return null;
	}

	// 实现查询方法,该方法应该返回查询得到的Cursor
	@Override
	public Cursor query(Uri uri, String[] projection, String where,
		String[] whereArgs, String sortOrder)
	{
		System.out.println(uri + "===query方法被调用===");
		System.out.println("where参数为:" + where);
		return null;
	}

	// 实现插入的方法,该方法应该新插入的记录的Uri
	@Override
	public Uri insert(Uri uri, ContentValues values)
	{
		System.out.println(uri + "===insert方法被调用===");
		System.out.println("values参数为:" + values);
		return null;
	}

	// 实现删除方法,该方法应该返回被删除的记录条数
	@Override
	public int delete(Uri uri, String where, String[] whereArgs)
	{
		System.out.println(uri + "===delete方法被调用===");
		System.out.println("where参数为:" + where);
		return 0;
	}

	// 实现删除方法,该方法应该返回被更新的记录条数
	@Override
	public int update(Uri uri, ContentValues values, String where,
		String[] whereArgs)
	{
		System.out.println(uri + "===update方法被调用===");
		System.out.println("where参数为:"
			+ where + ",values参数为:" + values);
		return 0;
	}
}
<pre name="code" class="java">ContentProvider:提供了增、删、改、查的方法,同时也可以联系本地SQLite,对外提供数据。


配置ContentProvide

<provider
		    android:exported="true"
		    android:name=".FirstProvider"
		    android:authorities="org.crazyit.providers.firstprovider">
</provider>
name:指定的Android类
authoruties:指定ContentProvide的uri
exported:


使用ContentResolve调用方法

package org.crazyit.resolver;

import org.crazyit.resolver.R;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class FirstResolver extends Activity
{
	ContentResolver contentResolver;
	Uri uri = Uri.parse("content://org.crazyit.providers.firstprovider/");

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取系统的ContentResolver对象
		contentResolver = getContentResolver();
	}

	public void query(View source)
	{
		// 调用ContentResolver的query()方法。
		// 实际返回的是该Uri对应的ContentProvider的query()的返回值
		Cursor c = contentResolver.query(uri, null
			, "query_where", null, null);
		Toast.makeText(this, "远程ContentProvide返回的Cursor为:" + c,
			Toast.LENGTH_LONG).show();
	}

	public void insert(View source)
	{
		ContentValues values = new ContentValues();
		values.put("name", "fkjava");
		// 调用ContentResolver的insert()方法。
		// 实际返回的是该Uri对应的ContentProvider的insert()的返回值
		Uri newUri = contentResolver.insert(uri, values);
		Toast.makeText(this, "远程ContentProvide新插入记录的Uri为:"
			+ newUri, Toast.LENGTH_LONG).show();
	}

	public void update(View source)
	{
		ContentValues values = new ContentValues();
		values.put("name", "fkjava");
		// 调用ContentResolver的update()方法。
		// 实际返回的是该Uri对应的ContentProvider的update()的返回值
		int count = contentResolver.update(uri, values
			, "update_where", null);
		Toast.makeText(this, "远程ContentProvide更新记录数为:"
			+ count, Toast.LENGTH_LONG).show();
	}

	public void delete(View source)
	{
		// 调用ContentResolver的delete()方法。
		// 实际返回的是该Uri对应的ContentProvider的delete()的返回值
		int count = contentResolver.delete(uri
			, "delete_where", null);
		Toast.makeText(this, "远程ContentProvide删除记录数为:"
			+ count, Toast.LENGTH_LONG).show();
	}
}
通过this.getContentResolver()方法获取ContentResolve。ContentResolve与ContentProvide通过Uri联系在一起,通过contentResolve调用增删改查,直接调用ContentProvide的增删改查方法。


Android系统为ContentProvide提供工具类:UriMatcher和ContentUris

UriMatcher:主要作用是为了确定该ContentProvide能处理的Uri,以及确定每个方法中Uri参数多操作的数据

ContentUris:主要是处理增加数据时,对返回值Uri的处理,insert时返回一个携带id的uri





Android9.0 framework层ContentProvider引起ANR的原理分析 Android系统中,在app中进行一些操作时,系统中的ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会在app进行操作app时, 检测App的响应时间,如果App在特定时间无法响应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。 阅读详情

相关推荐

Android使用ContentProvide实现数据共享

Android使用ContentProvide实现数据共享,源于《疯狂Android讲义》值得学习

ANR系列之四:ContentProvider类型ANR产生原理讲解

本文主要会讲解以下内容: 1.provider类型的ANR在系统侧的处理流程; 2.provider类型的ANR在应用侧如何触发; 3.ContentProviderClient的使用; 4.什么场景下,可以触发provider类型的ANR。

分享+记录 3414

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2019

Android四大组件之一 ContentProvide

四大组件之一 content provide

fry3309的博客 3845

115.工业相机海康SDK开发指南(阅读)

包含初始化SDK和反初始化SDK接口。(由于看不到函数内部的具体实现,因此以下的解释仅代表个人的理解)

weixin_63779802的博客 5994

linux下载NCBI基因组数据

fastq-dump --gzip --split-3 SRR25474921.sra,#使用fastq-dump将sra转换为fastq格式,--split-3 参数可以把双端测序的reads提取出来,左端标示为*_1.fastq;右端标示为*_2.fastq。安装之后转到NCBI网页搜索需要的数据或者到SRA数据中查找,我下载的是SRA数据库中的SRR25474921(SRA中是原始测序数据)prefetch --option-file SRR_Acc_List.txt #下载多个SRA文件。

k7586556的博客 2302

Android实例demo12之contentprovide内容提供者与被提供者

Android中数据共享利用contentprovide、sharedperference可以完成不同应用之间的数据交互。 Contentprovide 分为数据提供部分以及数据使用部分。 数据提供: (1)创建一个类继承contentProvider (2)在oncreat方法中添加需要提前实现的对象。如果要是对数据库进行操作,那么这里就要实现数据库操作对象的方法。 public b

关注IOS、Android网络、音视频编解码、特效、Neon算法优化,DSP等嵌入式驱动开发算法移植 840

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 158

ContentProvide-安卓四大组件(内容提供者)

1.ContentProvide是什么 为了跨进程通信,访问其他的app的数据库,用广播比较麻烦,所以可以使用ContentProvide将数据暴露,给其他app去调用自己的数据,例如微信获取通讯录的数据。 2.ContentResoler是什么 ContentProvide将数据暴露,就需要有类去接受和调用里面的方法,ContentResoler就是用来接收ContentProvide...

xfscy的博客 859

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3347

Android——ContentProvide 内容提供者+四大组件之三

Android——ContentProvide  内容提供者+四大组件之三 Android提供的用于不同应用共享数据API Android系统提供的 ContentProvide   1Applications 提供已安装应用程序信息 Browser  浏览器 CallLog   储存通话记录 ......................... package c.e

zhangyufeng0126的博客 844

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

Android四大组件之ContentProvide(内容提供者)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33728708的博客 398

【软考】高项论文写作常见模板

本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。

奶爸的编程之路,也就一周冷个三天 1687

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android-使用ContentProvide(内容提供者)向其他应用程序共享数据

使用ContentProvide(内容提供者)向其他应用程序共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_...

weixin_34404393的博客 675

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

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

45. 【Android教程】内容提供者 - Content Provider

照旧,首先看看官方解释:文档解释略长,这里用自己的话简要描述一发:Content Provider 是 Android 四大组件之一,通过它可以向其他 App 提供数据。当收到其他 App 的数据请求时,会有一个 Content Resolver 接口统一对请求进行处理。数据请求通过 URI 的形式发起,每一次请求都需要带上 URI,Content Resolver 非常灵活并且可控性很强,在这里我们可以对来访者做鉴权,然后根据权限的不同给予不同敏感级别的数据,甚至可以对部分 App 拒绝提供数据。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 1828

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

Android 之使用ContentProvider(内容提供者)共享数据

<br />l使用ContentProvider(内容提供者)共享数据<br />/* ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也

Come on ! Just Do it ! 1839

Android-ContentProvide

Android-ContentProvide概述一般应用的数据库是不允许其他应用访问的,可是在某些情况下我们又是必须要访问的,比如一些联系人云备份应用。 Android为了解决这个问题,提供了ContentProvide。它作为android的四大组件之一。 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用。通过single ContentResolver i

motionEnabled 707

内容提供者 ContentProvide简单示例

此示例展示了利用内容提供者获得联系人电话号码和获取图库的图片,main代码如下:main:package com.luo.dllo.contentprovidetest;import android.content.ContentResolver; import android.content.Intent; import android.content.res.Resources; import

YouAreMyHoleWorld的博客 528

ContentProvide 应用之间的通信

清单文件配置 exported 设置true 被的应用才可以访问  新建自定义内容提供者 extend ContendProvide package com.example.contentprovide; import android.content.ContentProvider; import android.content.ContentValues; import and

u013598111的专栏 663

ContentProvider(内容提供者)和ContentResolve(内容访问者)

ContentProvder(内容提供者)是安卓四大组件之一,用来共享数据应用程序的数据,当你需要把你的应用程序的数据共享给其他的应用程序的时候,才需要它。它对外提供了其它应用可以直接访问的增删改查方法。 下面是实现ContentProvider的方法:1.写一个查看界面:<LinearLayout xmlns:android="http://schemas.android.com/apk/re

Super_769的博客 1089

安卓Content Provide(内容提供者)

安卓四大组件之内容提供者Content ProvideContentProvide是什么使用Content Provide读取和操作相应程序中的数据获取ContentResolver类实例使用ContentResolver中的一系列方法进行增删改查程序中创建自己的Content Provide,给其他程序提供外部访问接口 ContentProvide是什么 ContentProvide用于实现程序之间的数据共享,提供一整套完整的机制,允许访问其他程序的数据(前提是目标程序提供外部访问的接口),同时保证被访问

qq_44356236的博客 714

contentprovide(内容提供者)和contentparser(内容解析者)

在一些应用中已经提供了内容提供者(比如短信、手机联系人)我们只需要创建内容解析者就可以对这些应用里面的数据进行操作一、contentprovide 1.在清单文件中注册<provider android:name="com.guo.mycontentprovider.MyContentProvider" android:authorities="gu

a_sid的博客 1019

Android ContentProvide 内容提供器学习笔记

阅读《第一行代码》笔记 ContentResolver的基本用法: 使用uri来表示要访问的数据来源 Uri uri = Uri.parse("content://com.example.app.provider/table1") 查询: Cursor cursor = getContentResolver().query( uri, projection, selection, selectionArgs, sortOrder); if (cursor != null) { ..

璀璨下的一点星辰 496
上一篇: Apache HttpClient之Servelet
下一篇: Android之Activity生命周期
Simple_Man_Just
博客等级 码龄11年 18粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值