内容提供器简介

内容提供器是Android中实现跨程序共享数据的标准方式,内容提供器主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性

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

  • 使用现有的内容提供器来读取和操作相应程序中的数据
  • 创建自己的内容提供器给我们程序的数据提供外部访问接口

当一个应用程序通过内容提供器对其数据提供了外部访问接口,任何其他的应用程序就都可以对这部分数据进行访问**

对于每一个应用程序来说,如果想要访问内容提供器中共享的数据中,就一定要借助ContentResolver类,此类可以通过Context中的getContentResolver()方法获取到其实例对象,其内部提供了一系列方法进行CRUD操作(和数据库打交道)**

内容提供器中的URI


内容URI

内容URI给内容提供器中的数据建立唯一的标识符,同时也是ContentResolver类进行CURD操作的所需参数之一

内容URI由两部分组成:

  • 权限:用于对不同的应用程序进行区分。一般情况下,都会采用程序的包名进行区分
  • 路径:用于对同一应用程序中不同的表做区分,添加在去权限的后面。一般情况下,使用表名
    再在字符串的头部加上协议声明,故内容URI的标准格式如下:
    content://com.example.app.provider/table1

我们可以在内容URI的后面加上一个id:
content://com.example.app.provider/table1/1表示调用方期望访问的是com.example.app这个应用的table表中id为1的数据。

两种格式的内容URI:

  • 以路径结尾就表示期望访问该表中所有的数据
  • 以id结尾表示期望访问该表中拥有响应id的数据

可以使用通配符的方式来分别匹配这两种格式的内容URI:

  • “*” :表示匹配任意长度的任意字符
  • “#”:表示匹配任意长度的数字

例:

  • 一个能匹配任意表的内容URI格式就可以写成:
    content://com.example.app.provider/*
  • 一个能匹配table1表中任意一行数据的内容URI就可以写成:
    content://com.example.app.provider/table1/#

得到了内容URI字符串,我们需要将之解析成Uri对象才可以做为参数传入:

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

创建自己的内容提供器时使用到的getType()方法


根据传入的内容URI来返回相应的MIME类型,所有的内容提供器都必须提供的一个方法

内容URI对应的MIME字符串主要由三部分组成:

  • 必须以vnd开头
  • 如果内容URI以路径结尾,则后接android.cursor.dir/,如果内容以id结尾,则后接android.cursor.item/
  • 最后接上vnd..

例:
对于content://com.example.app.provider/table1内容URI,对应的MIME类型就可以写成:
vnd.android.cursor.dir/vnd.com.example.provider.table1
对于content://com.example.app.provider/table1/1内容URI,对应的MIME类型就可以写成:
vnd.android.cursor.item/vnd.com.example.provider.table1

你可能感兴趣的:(内容提供器简介)