Android之内容提供者ContentProvider的总结

本文包含以下知识点:

  ContentProvider
  Uri 的介绍
  ContentResolver:

  监听ContentProvider的数据改变



一:ContentProvider部分

ContentProvider的作用:

  Content providers store and retrieve data and make it accessible to all applications. They‘re the only way to share data across applications;

there‘s no common storage area that all Android packages can access.

  内容提供者作为一个应用程序共享其数据的唯一接口供其他的应用程序访问。比如我开发一个程序:想访问联系人,那么就必须通过联系人里的ContentProvider来获取数据。

  而如果别的应用程序想访问我的数据,必须看我个人的意愿,我意愿创建什么样的ContentProvider愿意共享出什么数据,别人才能看到这些数据。可以理解为我有意通 过

  ContentProvider来暴露我的数据。

ContentProvider的数据存储的形式:

  Content providers expose their data as a simple table on a database model, where each row is a record and each column is data of a particular type and meaning.

  以表格的形式暴露数据:

  For example, information about people and their phone numbers might be exposed as follows:

  

  Every record includes a numeric _ID field that uniquely identifies the record within the table. 每一条记录都会有一个唯一的ID用于索引数据。

ContentProvider的创建:(注意创建完ContentProvider之后一定要在清单文件中进行配置)

  创建步骤如下:

  

  那用中文解说就是:

    1.找到一个你喜欢的方式来存储数据。

    2.继承ContentProvider的类,注意:继承这个类的时候要重写以下六种方法来供调用:

    query() //查询数据,结果集以Cursor返回
    insert() //插入数据
    update() //更新数据
    delete() //删除数据。上面四个方法的第一个参数都要传入一个Uri对象。
    getType() 
    onCreate()

    3.在清单文件中进行配置://自己定义了一个ContentProvider一定要告诉别人不然人家怎么知道呢

      To let the Android system know about the content provider you‘ve developed,

         declare it with a <provider> element in the application‘s AndroidManifest.xml file.

      Content providers that are not declared in the manifest are not visible to the Android system

      

    配置时还有一个重要的参数:exported,表示该provider对象能否被其他程序访问,当然是true;

   注意:以上的配置是最为简单的配置,所有人只要知道了Provider的uri就能直接访问,实际可能需要加上permission权限来提高权限。

二:Uri部分:

  Uri是实现数据共享的桥梁是Android资源的唯一标识,相当于web中的URL一样。

public static final Uri CONTENT_URI =                Uri.parse("content://com.example.codelab.transportationprovider");

    



三:ContentResolver:

ContentProvider的获取和使用就要结合:ContentResolver和Uri来一起配合:
  forexample:在我的应用程序里调用联系人:

    ContentResolver cr = getContentResolver();

    //获取系统的resolver对象,注意此时并不知道要操作哪一个provider的数据。

    //需要一个uri参数在调用参数时与之匹配

    

      CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");

    cr可以调用增删改查的方法,通过Uri的参数实际上是调用对应ContentProvider的增删改查的方法。



四:内容观察者:ContentObserver:

  当数据共享出来之后,可以通过相关方法使得Provider里的数据发生改变,Android提供了内容观察者ContentObserver来监听其数据的改变。

  在实际使用时,我们需要继承ContentObserver的类并重写onChange()方法用于监听数据的改变。

  为了监听指定ContentProvider的数据改变,还需要通过ContentResolver向指定Uri注册内容观察者监听器:

  

  参数介绍:1.uri指定ContentProvider。2.boolean值:假设:uri=content://abc,如果为true,则:content://abc/d数据改变就会触发监听,

        如果为flase:则不会触发。

        3自定义的ContentObserver.

时间: 2024-08-06 09:14:55

Android之内容提供者ContentProvider的总结的相关文章

Android中内容提供者ContentProvider实现数据库增删改查

1.我们首先new一个我们自己的类集成ContentProvider,并实现方法如下 package com.wzw.sqllitedemo.providers; import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues;

[Android Pro] 内容提供者ContentProvider的基本使用

一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.ContentProvider为存储和获取数据提供了统一的接口.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如采用文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.而使用ContentProvider共享数据的

[Android Pro] 监听内容提供者ContentProvider的数据变化

转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改的通知并处理相应操作. 二.示例代码 A应用 /** * 对内容提供者进行操作 * * @author XY * */ public class MainActivity exten

Android四大组件之内容提供者--ContentProvider

Android四大组件之内容提供者--ContentProvider 1,什么是ContentProvider ContentProvider将应用中的数据对其它应用进行共享, 提供增删改查的方法 ContentProvider统一了数据的访问方式,不必针对不同数据类型采取不同的访问策略 ContentProvider将数据封装,只暴露出我们希望提供给其它程序的数据 ContentProvider中可以注册观察者, 监听数据的变化 2,怎么创建 2.1定义类继承ContentProvider,

【Android基础】内容提供者ContentProvider的使用详解

1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不同的软件之间数据共享,提供统一的接口.也就是说,如果我们想让其他的应用使用我们自己程序内的数据,就可以使用ContentProvider定义一个对外开放的接口,从而使得其他的应用可以使用咱们应用的文件.数据库内存储的信息.当然,自己开发的应用需要给其他应用共享信息的需求可能比较少见,但是在Andro

Android开发之内容提供者ContentProvider

2 内容提供者ContentProvider 一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.而使用ContentProvider共享数据的好处是统一了数据

Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容

一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件访问类似,都是共享应用程序数据,不同的是之前的两种文件格式可能完全不同,如可能为xml,txt,sql等等,这里ContentProvider返回的数据格式是统一的,因此应用的更为广泛一点. 二.实例 这里使用的是A应用通过ContentProvider共享数据给B应用.这里A应用用的是前文中的an

内容提供者ContentProvider

首先在需要提供内容提供者的应用中添加内容提供者的代码 package com.example.sqllite; import com.example.sqllite.servise.DBOpenHelp; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher

android之内容提供者解析

该系统有两个应用,比较繁琐.但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦.先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作. 我们先看内容提供者所在的应用,代码结构: activity代码: [java] view plaincopy package cn.com.contentProvider; import android.app.Activity; import android.os.Bundle; import android.widget.Tex