首页 > 编程语言 >Android 访问其他程序中的数据

Android 访问其他程序中的数据

时间:2023-01-19 09:11:20浏览次数:33  
标签:app 程序 URI Uri 访问 provider Android com example

ContentProvider 的用法一般有两种:一种是使用现有的ContentProvider 读取和操作相应程 序中的数据;另一种是创建自己的ContentProvider ,给程序的数据提供外部访问接口。

ContentResolver的基本用法

对于每一个应用程序来说,如果想要访问ContentProvider 中共享的数据,就一定要借助 ContentResolver 类,可以通过Context 中的getContentResolver()方法获取该类的实例。

ContentResolver 中提供了一系列的方法用于对数据进行增删改查操作,其中insert() 方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方 法用于查询数据。

有没有似曾相识的感觉?没错,SQLiteDatabase 中也是使用这几个方法进 行增删改查操作的,只不过它们在方法参数上稍微有一些区别。

不同于SQLiteDatabase ,ContentResolver 中的增删改查方法都是不接收表名参数的,而是使用一个Uri参数代替,这个参数被称为内容URI。内容URI给ContentProvider 中的数据建立了唯一标识符,它主要由两部分组成:authority 和path 。

authority 是用于对不同的应用程序做区分的,一般为了避免冲突,会采用应用包名的方式进行命名。比如某个应用的包名是 com.example.app ,那么该应用对应的authority 就可以命名为 com.example.app.provider 。

path 则是用于对同一应用程序中不同的表做区分的,通常会添 加到authority 的后面。比如某个应用的数据库里存在两张表table1 和table2 ,这时就可以将 path 分别命名为/table1 和/table2 ,然后把authority 和path 进行组合,内容URI就变成了 com.example.app.provider/table1 和com.example.app.provider/table2 。

不过,目前还 很难辨认出这两个字符串就是两个内容URI,我们还需要在字符串的头部加上协议声明。因此, 内容URI最标准的格式如下:

content://com.example.app.provider/table1

content://com.example.app.provider/table2

有没有发现,内容URI可以非常清楚地表达我们想要访问哪个程序中哪张表里的数据。也正是因 此,ContentResolver 中的增删改查方法才都接收Uri对象作为参数。如果使用表名的话,系统将无法得知我们期望访问的是哪个应用程序里的表。 在得到了内容URI字符串之后,我们还需要将它解析成Uri对象才可以作为参数传入。解析的方 法也相当简单,代码如下所示:

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

只需要调用Uri.parse()方法,就可以将内容URI字符串解析成Uri对象了。

标签:app,程序,URI,Uri,访问,provider,Android,com,example
From: https://www.cnblogs.com/ooo0/p/17061043.html

相关文章