iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android之ContentResolver与ContentProvider介绍
  • 898
分享到

android之ContentResolver与ContentProvider介绍

Android 2022-06-06 09:06:03 898人浏览 安东尼
摘要

Android中对数据操作包含有: file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都

Android中对数据操作包含有:
file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。

一、 使用方式

一个应用实现ContentProvider来提供内容给别的应用来操作,
一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。

1. ContentResolver的获取

通过Context类:
 
代码如下:
public abstract ContentResolver getContentResolver(); 
  
2. ContentResolver常用操作

代码如下:
//查询:  
public final Cursor query(Uri uri, String[] projection,  
           String selection, String[] selectionArgs, String sortOrder);  
//新增  
public final Uri insert(Uri url, ContentValues values)      
//更新  
public final int update(Uri uri, ContentValues values, String where,  
             String[] selectionArgs)  
//删除  
public final int delete(Uri url, String where, String[] selectionArgs)  

 以上操作实际是通过Uri来匹配ContentProvider, 再由ContentProvider来进行具体操作的。
       操作的参数和操作sqlite各函数的参数意义是一样的。 
      
二、实现ContentProvider提供给外界访问
调用者ContentResoler是通过一个Uri来找到相应的ContentProvider的来进行实际操作。
     1. Uri概念
        一个Uri的样子如:

代码如下:
scheme://authorities/path/id 

       如电话记录:
     
代码如下:
public static final Uri CONTENT_URI = Uri.parse("content://call_log/calls"); 

       a.根据scheme不同调用不程序来处理, 常用的:content, android_resource, file, Http
       b.authorities是provider定义的,在AndroidManifest.xml中定义
       c.path和id就好理解的。
    
     2. Uri定义
       创建自己的Uri, 如:
代码如下:     
content://com.shguo.statistic/sms 

       一般数据中都有dir和item两种(当然可定义多个)。为ContentProvider创建息的UriMatcher并添加这两者:

代码如下:
String AUTHORITY = "com.shguo.statistics";  
UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
sUriMatcher.addURI(AUTHORITY, "sms",   SMS_DIR);   //SMS_DIR = 1  
sUriMatcher.addURI(AUTHORITY, "sms/#", SMS_ITEM); //SMS_ITEM = 2 

 contentProvider要根据传入uri判断是dir还是item来操作的。
     
代码如下:
switch (sUriMatcher.match(uri))  

来分步操作.
      
3. 定义MIME类型,
      覆盖getType方法:主要是根据uri来返回Provider的MIME类型
   
代码如下:
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.shguo.sms";  
ublic static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.shguo.sms"; 

 getType()为: 
    

代码如下:
switch (sUriMatcher.match(uri)) {  
        case SMS_DIR:  
            return   CONTENT_TYPE;  
        case SMS_ITEM:  
            return CONTENT_ITEM_TYPE;  
        default:  
            throw new IllegalArgumentException("Unknown URI " + uri);  
     } 

4. 实现query, insert, delete, update四个操作。

       具体的实现可以用sqlite, file等。并根据uri分情况操作。
       a. query时如果是item加查询条件id.
          where = "_ID=" + uri.getPathSegments().get(1)   + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : "";
          最后要加上
         cursor.setNotificationUri(getContext().getContentResolver(), uri);
       
       b. insert时要求uri只能是dir. 成功之后返回一个加id的uri.
        
代码如下:
Uri insertUri = ContentUris.withAppendedId(CONTENT_URI, rowId); 

       c. update、delete与query差不多。
        
代码如下:
//注意通知注册uri的观察者。  
getContext().getContentResolver().notifyChange(uri, null); 
                 
5. 在AndroidManifest.xml中定义
        provider元素,主要属性有:
     
代码如下:
name => ContentProvider类名  
authorities => content type的授权部分  
multiprocess => true允许在每个客户进程中创建provider实例,消除执行IPC的需求。

您可能感兴趣的文章:Android中ContentProvider和ContentResolver详解android利用ContentResolver访问者获取手机联系人信息android利用ContentResolver访问者获取手机短信信息Android使用ContentResolver搜索手机通讯录的方法Android ContentResolver使用说明android ContentResolver获取手机电话号码和短信内容


--结束END--

本文标题: android之ContentResolver与ContentProvider介绍

本文链接: https://www.lsjlt.com/news/25877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Kotlin ContentProvider使用方法介绍
    目录1、注册ContentProvider2、内容URI内容URI的标准格式通配符3、创建自己的ContentProvider4、访问其他程序中的数据1、注册ContentProvi...
    99+
    2024-04-02
  • Android dumpsys介绍
    文章目录 一、需求二、环境三、相关概念3.1 dumpsys3.2 Binder3.3 管道 四、dumpsys指令的使用4.1 dumpsys使用4.2 dumpsys指令语法 五、...
    99+
    2023-10-26
    1024程序员节
  • Android RIL介绍
    文章目录 一、需求二、相关概念2.1 IMS2.2 Volte2.3 CS域与PS域2.3.1 CS域2.3.2 PS域 2.4 VOIP2.5 URC消息2.6 HIDL 三、环境...
    99+
    2023-09-29
    android 开发语言 java
  • 如何在Android中自定义ContentProvider与ContentObserver
    今天就跟大家聊聊有关如何在Android中自定义ContentProvider与ContentObserver,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android 中自定义C...
    99+
    2023-05-30
    android contentprovider contentobserver
  • Android MaterialCardView的使用介绍与示例
    Android—MaterialCardView的使用 我们的征程是星辰大海,而非人间烟尘 文章目录 Android---MaterialCardView的使用演示xml布局其他的...
    99+
    2024-04-02
  • Android四大组件之Activity详细介绍
    目录理论概述Activity的理解Activity的定义Activity的作用类比Activity与ServletIntent的理解Intent的分类Intent的使用IntentF...
    99+
    2024-04-02
  • Android之Compose页面切换动画介绍
    目录前因后果开始尝试开始撸码仓促的结尾 前因后果 Compose 正式版已经发布了一个多月了,从 Compose beta 版本发布之后各大网站中热度就一直不减,官方也一直在为开发者...
    99+
    2024-04-02
  • Android开发之音视频协议介绍
    目录什么是视频文件什么是264了解音视频协议有啥用?两大电信联盟ITU-TISOITU-T 视频编码发展历程H.26X系列(由ITU[国际电传视讯联盟]主导)其他音视频协议Googl...
    99+
    2024-04-02
  • Android OpenGl 介绍(一)
    一、OpenGl 介绍 看到这个介绍,相信大家都不会陌生,因为在平时的工作中,或多或少大家都会听说过 openGl 这个东西,而且对它的印象基本都是觉得比较高深难懂。其实这个东西也不是那么难,那么无从下手,首先必须要了解一些基本的背景和搞懂...
    99+
    2023-09-01
    android 实时音视频
  • Android基础之常用控件属性介绍
    目录常用控件之常用属性控件可见性TextViewButtonEditTextImageViewProgressBarAlertDialogProgressDialogToastMen...
    99+
    2024-04-02
  • Android WorkManager使用介绍
    一、引言   WorkManager 是google提供的异步执行任务的管理框架,是 Android Jetpack 的一部分,会根据手机的API版本和应用程序的状态来选择适当的方式执行任务。   在...
    99+
    2023-09-07
    android
  • vue开发之moment的介绍与使用
    前言 在日常开发中,我们常常会遇到以下几种场景: 需要对日期进行非标准格式展示,如 :2021年5月11日星期二下午6点42分 需要对日期进行处理,如:...
    99+
    2024-04-02
  • Android ViewBinding使用介绍
    目录一、kotlin-android-extensions二、ViewBinding使用1.gradle配置2.在Activity 使用3.在Fragment使用4.在Adapter...
    99+
    2024-04-02
  • Android Socket 简单介绍
    文章目录 前言一、Socket是什么?百度百科的解释我自己的理解 二、简单示例1.服务端2.客户端3.布局4.实现 参考总结 前言 最近需求需要使用Socket进行通讯,我在工作...
    99+
    2023-09-23
    android
  • Android数据库greenDAO配置与使用介绍
    目录build.gradle配置数据库初始化添加数据删除数据修改数据查询数据补充结束不知不觉发现都快一个月没有写点东西了,自己最近也是忙于工作与生活当中,这个月经历了很多事情,有开心...
    99+
    2023-03-12
    Android数据库greenDAO Android greenDAO
  • Android中BinderIPC机制介绍
    目录前言一、Binder是什么?二、为什么要使用Binder三、IPC机制原理传统IPC机制如何实现跨进程通信Binder IPC机制原理小结前言 记得刚开始做Andorid那会,面...
    99+
    2024-04-02
  • android 窗口焦点介绍
    背景 我们经常会遇到一种Application does not hava focused window的ANR异常,这种异常一般是没有焦点窗口FocusedWindow导致,且这类异常只会发生在key事件的派发,因为key事件是需要找到一...
    99+
    2023-08-21
    android
  • MySQL表与表之间的SQL Joins图介绍
    下图很好的解释了各表之间SQL Joins之间的关系 ...
    99+
    2024-04-02
  • Python之模块介绍
    模块:用一段代码实现了某些功能的代码集合。Python模块分为三种:自定义模块内置标准模块开源模块os模块:提供对操作系统进行调用的接口,以下是方法os.getcwd() :获取当前工作目录,即当前python脚本工作的目录路径示例:>...
    99+
    2023-01-31
    模块 Python
  • Android WebView预渲染介绍
    目录前言术语对齐客户端可以从哪些方面优化h5页面的加载速度?优化思路预渲染的基本实现逻辑是怎样的?预创建预创建个数预创建时机预创建复用预渲染预渲染时机预渲染有效性校验时间有效性状态有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作