自定义内容提供者getType(Uri uri) 方法详解

掌握内容提供者:Android数据共享技术详解 本章节详细介绍了Android内容提供者(Content Provider)的概念和实现方法。内容提供者是Android平台中用于实现数据共享的标准接口,它允许一个应用的数据显示给其他应用。本章通过实例代码和步骤解析,深入探讨了如何定义内容URI,实现getType()和query()等核心方法,并通过ContentResolver与内容提供者交互来操作数据。 阅读详情

10我们先来看看contentProvider 中这个类的定义

/**
 * Implement this to handle requests for the MIME type of the data at the
 * given URI.  The returned MIME type should start with
 * <code>vnd.android.cursor.item</code> for a single record,
 * or <code>vnd.android.cursor.dir/</code> for multiple items.
 * This method can be called from multiple threads, as described in
 * Processes
 * and Threads.
 *
 *

Note that there are no permissions needed for an application to * access this information; if your content provider requires read and/or * write permissions, or is not exported, all applications can still call * this method regardless of their access permissions. This allows them * to retrieve the MIME type for a URI when dispatching intents. * * @param uri the URI to query. * @return a MIME type string, or {@code null} if there is no type. */ public abstract @Nullable String getType(@NonNull Uri uri);
注释说的也算是比较清楚了,根据给定的Uri返回一个MIME类型的数据,如果是单条数据,那么我们的MIME类型应该以vnd.android.cursor.item开头,如果是多条数据,我们的MIME类型的数据应该以vnd.android.cursor.dir开头,同时,注释还很明确的告诉我们,对于没有访问该ContentProvider权限的应用依然可以调用它的getType方法。

那么我们先来看看什么是MIME,根据维基百科上的解释,MIME是多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,这话太笼统,大家可以 看看w3c上的解释http://www.w3school.com.cn/media/media_mimeref.asp,这里有详细的举例。

参考网上的信息,getType的作用应该是这样的,以指定的两种方式开头,android可以顺利识别出这是单条数据还是多条数据,比如在上篇博客中,我们的查询结果是一个Cursor,我们可以根据getType方法中传进来的Uri判断出query方法要返回的Cursor中只有一条数据还是有多条数据,这个有什么用呢?如果我们在getType方法中返回一个null或者是返回一个自定义的android不能识别的MIME类型,那么当我们在query方法中返回Cursor的时候,系统要对Cursor进行分析,进而得出结论,知道该Cursor只有一条数据还是有多条数据,但是如果我们按照Google的建议,手动的返回了相应的MIME,那么系统就不会自己去分析了,这样可以提高一丢点的系统性能。基于此,我们上篇自定义的ContentProvider中的getType方法可以这么写:



@Override
public String getType(Uri uri) {
    int code = matcher.match(uri);
    switch (code) {
    case 1:
        // 查询多条数据
        return vnd.android.cursor.dir/multi;
    case 2:
    case 3:
        // 根据id或者姓名查询一条数据
        return vnd.android.cursor.item/single;
    }
    return null;
}

MIME前面的一部分我们按照Google的要求来写,后面一部分就可以根据我们自己的实际需要来写。

还有一种我们可能会很少遇到的情况,我们有可能不知道ContentProvider返回给我们的是什么,这个时候我们可以先调用ContentProvider的getType,根据getType的不同返回值做相应的处理。

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和LWIP搞定RMII以太网(附复位与PHY地址避坑指南) 本文详细解析了STM32F407与LAN8720通过RMII接口实现以太网通信的完整流程,重点解决了网口不通的常见问题。从硬件连接到CubeMX配置,再到LWIP网络参数设置,提供了复位时序、PHY地址配置等关键细节的避坑指南,帮助开发者快速排查和解决以太网通信故障。 阅读详情

相关推荐

UE5 中 Python 编程:Python 代码加载到 UE5 中,如何供蓝图节点调用

配置 python 代码的路径,使 UE5 启动时,加载代码文件。重启之后,在蓝图中右键,就能搜索到你定义的方法了。参数为 str 字符串类型,返回值为 向量数组。注意:一定要 重启 UE5。

topcss的专栏 4000

对ContentProvider中getType(Uri uri)和android.intent.category.DEFAULT的理解 .

在这里解释下getType(Uri uri)何时被调用,和 android.intent.category.DEFAULT 的理解。      我们需要什么时候加android.intent.category.DEFAULT呢? 1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明 确) intent。      Explicit I

u012062454的专栏 544

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1817

Java反射的getType方法

Java Field.getGenericType()/getType()返回对象的区别 getType(): 获取属性声明时类型对象(返回class对象) getGenericType() : 返回属性声的Type类型 getType() 和 getGenericType()的区别 : 1.首先是返回的类型不一样,一个是Class对象一个是Type接口。 2.如果属性是一个泛型,从getType()只能得到这个属性的接口类型。但从getGenericType()还能得到这个泛型的参数类型。 3.getGe

mll999888的专栏 4403

同花顺PC端逆向解析:Hook注入与加密破解实战指南

在Windows客户端数据采集场景中,当常规HTTP爬虫失效时,内存级逆向分析成为获取实时行情数据的关键路径。其核心涉及进程注入、运行时解密、反调试绕过等底层技术,本质是理解PE加载机制、函数调用约定与内存保护策略的协同过程。同花顺作为典型加固客户端,采用ASPack加壳+自研解密+多线程校验三重防护,迫使开发者转向APC注入、动态密钥提取与XXTEA算法复刻等高阶手段。本文聚焦于DLL注入选型依据、解密函数定位方法及二进制Blob结构化解析,最终实现从内存读取到Pandas DataFrame的端到端数据

weixin_32234493的博客 1209

电磁炉线圈加热仿真全流程:用Ansys Maxwell分析涡流效应与热损耗

本文详细介绍了使用Ansys Maxwell进行电磁炉线圈加热仿真的全流程。通过构建2D轴对称涡流场模型,深入分析了高频下的涡流效应、趋肤效应与热损耗分布,为优化线圈设计、提升加热效率与均匀性提供了量化依据和实用指南。

sss66的博客 970

反射中getType()与getName()方法

parameter.getType()返回class对象以及参数类型,parameter.getType().getName()返回class对象,再用class对象调用getName()方法返回参数类型,因此,类中的一个方法,用于获取当前class对象参数的名称。对于普通方法的参数,参数名称是编译时确定的。需要注意的是,在某些情况下,参数名称可能无法确定(例如,对于单个参数的 Lambda 表达式)。对象可以用于获取有关该类型的更多信息,例如类的父类、接口、字段、构造函数或方法等。

qq_46053741的博客 1155

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6485

java gettype成员变量_Java反射理解(四)-- 获取成员变量构造函数信息

Java反射理解(四)-- 获取成员变量构造函数信息步骤获取成员变量信息:obj.getClass() 获取类类型对象成员变量也是对象,java.lang.reflect.Field 类中封装了关于成员变量的操作:getFields() 方法获取的是所有的public的成员变量的信息getDeclaredFields() 获取的是该类自己声明的成员变量的信息getType() 得到成员变量的类型...

weixin_30444111的博客 458

uni-app - 将 base64 图片编码转为 Blob 本地文件路径(把base64类型的图片,转换成blob二进制文件流)适用于 uni-app / vue.js / JavaScript

uni-app/vue.js/JavaScript将base64转Blob,uniappapp端如何将图片的base64编码转换成File对象或Blob,uni-app/vue.js/JavaScript中拿到base64转blob对象,uniapp图片base64格式转blob格式方法,uniapp上传图片压缩转base64码与base64转图片路径,Base64/Blob/File图片文件转换,url、base64、blob相互转换方法,读取本地文件为Base64并转成B

🏆 前端领域优质创作者 1万+

如何解除Uniaccess管控??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2391

java反射中getType_java中通过反射获取方法并且调用(getMethod和invoke深入)实践

为了支持业务的快速变更,往往采用可配置的方式,将业务逻辑的处理部分配置在数据库中或者XMl文件里。配置什么,如何配置才更灵活,That's a problem.以数据库配置为例(xml相同),在数据库中可以配置上java包名+类名,一个类只处理一个功能(符合设计模式中的单一性原则),这样只需要把数据库中的类名读出来,Class.forname("xxxx").newInstance()即可实现,这...

weixin_29211309的博客 1610

26届数字IC秋招笔试面试全攻略-ASIC设计流程全解析

本文系统介绍了ASIC芯片设计的全流程。前端设计包括规格制定、架构设计、RTL编码和功能验证;后端设计完成物理实现,涵盖布局规划、时钟树综合、布线和物理验证等步骤;Tapeout阶段完成制造数据准备和交付。文章详细说明了各阶段的关键任务、验证方法和设计指标,并列举了典型工具链,为ASIC设计提供了全面的流程指导。通过严格的检查清单和验证步骤,确保芯片设计符合制造要求和性能目标。

2301_79143213的博客 365

Android - 内容提供者

内容提供者组件根据请求将数据从一个应用程序提供给其他应用程序。 此类请求由 ContentResolver 类的方法处理。 内容提供者可以使用不同的方式来存储其数据,并且数据可以存储在数据库、文件甚至网络上。内容提供者有时需要跨应用程序共享数据。 这就是内容提供者变得非常有用的地方。内容提供商让您可以将内容集中在一个地方,...

小屁孩大帅-保密的博客 1078

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android学习笔记--内容提供者

学习内容提供者内容提供者1.利用现有的内容提供者,操作相应程序的数据(ContentResolver 类)2.自定义自己的内容提供者,供其他程序使用 内容提供者 内容提供者,一般是用于跨程序之间数据的共享。一种是利用现有的内容提供者,来读取和操作相应程序的数据。另一种是创建自己的内容提供者为其他程序使用。 1.利用现有的内容提供者,操作相应程序的数据(ContentResolver 类) 想要访问内容提供者中所共享的数据,就必须要使用到ContentResolver这个类。可以通过Context中的getC

qq_44248026的博客 1628

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android四大组件-----contentprovider内容提供者 自己做为内容提供者

1 创建一个类继承自内容提供者 内容URI的格式 content://com.app.provider.table //以路径结尾表示期望访问该表中所有的数据 content://com.app.provider/table/1 以id结尾表示期望访问该表中拥有相应id的数据 使用通配符的方式了分别匹配者两种格式的内容的uRL i.*表示配置任意长度的任意字符 一个能够匹配任意表...

weixin_41069726的博客 138

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

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

Android - 内容提供者(Content Provider) 使用

内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。有时候需要在应用程序之间共享数据。这时内容提供者变得非常有用。内容提供者可以让内容集中,必要时可以有多个不同的应用程序来访问。内容提供者的行为和数据库很像。你可以查询,编辑它的内容,使用 insert(), update(), delete() 和 query() 来添加或者删除内容。

it_xushixiong的博客 2419

内容URI及自定义ContentProvider重写方法

内容URI内容URI:权限+路径 权限:用于不同的应用程序做区分,一般都采用程序包名的方式命名。 路径:用于对同一应用中不同的表做区分的,通常会添加到权限的后边。 如:content://com.mars.app.provider/table1 content://com.mars.app.provider/table2除此之外,我们还可以在内容URI后边再加上一个IDcontent://co

苦逼的程序猿☺ 2321

c# uri.host_C#| Uri.GetType()方法与示例

c# uri.host Uri.GetType()方法 (Uri.GetType() Method) Uri.GetType() method is an override method that is used to return, the type of current object. Uri.GetType()方法是用于返回当前对象类型的重写方法。 Syntax: 句法: T...

cumt30111的博客 195

Android ContentProvider内容提供者的详解

前面我们已经对四大组件的三个有了一定程度的了解,接下来我们来了解四大组件的最后一个——ContentProvider(内容提供者)。相比较前面的三个,内容提供者在日常的开发过程中用到的比较少,但是这并不意味着它不重要,所以接下来我们就来一起来揭开它神秘的面纱吧。 我们知道在Android中,大部分的数据都是在应用内自己运作的,即应用的数据大部分都是私有的,那么,假设我需要将自己应用内的数据暴露给其他的APP或者说我需要获取系统上的其他应用的数据该怎么办呢?这个时候ContentProvider就派上用场了。

zhoufan11132的博客 736

android ContentProvider中getType(Uri uri)的理解

<br />很多朋友在用ContentProvider的時候,對複寫的方法getType(Uri uri)不理解,也不知道這個方法是在什麼時候被調用的,今天就為大家解釋一下。<br />   當我們在程序中需要啟動例外的activity時,很多時候我們是使用的隱式調用,即我們不直接指定要跳轉的Activity,而是為Intent提供一些相關的參數,讓其自動的去和AndroidManifest.xml中已有的Activity去匹配,而IntentFilter(Intent 過濾器)在xml中有三個主要的參數:

bigapple88的专栏 1552

Day10 ContentProvider内容提供者的使用

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

huang_one_jun的博客 290

内容提供者1

发给你弄好就看见立刻

qq_45808858的博客 168

ContentProvider 的 getType(Uri uri)

在manifest文件中activity会有这样的属性

kingodcool的专栏 993

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

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

CodeMan 1514

ContentProvider中getType(Uri uri)用法及理解

*  getType()的调用:(以Android中的NotePad为例)      *  下面是一个隐式(implicit)Intent调用,这句代码存在于NotesList.java中,当插入一条记事时启用。      * startActivity(new Intent(Intent.ACTION_INSERT,getIntent().getData()));          *

hyz4287010的专栏 1160
上一篇: Android Junit 模块测试
下一篇: Android 继承SqLiteOpenHelper 实现内部数据库
一朵红杏
博客等级 码龄12年 51粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值