内容提供者学习总结

xiaoxiao2021-02-28  85

一. 内容提供者(Content Provider)四大基本组件之一,它的主要作用是在不同应用程序之间实现数据共享。说白了就是允许一个应用程序访问另一程序中的数据,它可以指定哪些可以被共享,这样就保证了程序本身的安全。Content Provider 具有两种用法:1.可以使用系统自带的内容提供者进行操作,例如:电话薄信息等。 2.写一个类继承内容提供者给程序中的数据提供外部访问接口。 二. 1. ContentResolver:内容解析者,用于对共享数据的操作,具有查询query(),添加insert(),更新update(),删除delete()这几个方法。使用Context中的getContentResolver()方法得到该类的实例。 2.URL:为内容提供者中提供的数据建立唯一标识符。 content://com.example.app.contentprovider/names 解释: content:// :协议声明(scheme),Android所规定为:content://。 authority: 内容提供者的唯一标识,方便外部调用者找到它,一般用程序的包名来命名像com.example.app.contentprovider这样。 path:用于同一应用程序的不同数据做区分,例如对表names进行操作,则命名/names 。 一些规则:URL后面可以加id,表示表中id为多少的数据;通配符,*:表示匹配任意长度的任意字符,#:表示匹配任意长度的数字。我们可以借助UriMatcher这个类实现匹配URI的功能,调用addURI()方法与mactch()方法配合使用。 在拥有URL字符串后,还要将其解析成Uri对象才可以使用。解析的方法:

Uri uri=Uri.Parse("content://com.example.app.contentprovider/names")

例如 用Uri来查询names中的数据: Cursor cursor=getContentResolver().query(uri,projection,selection,selectionArgs,orderBy); 具体的参数我在这就不解释了有时间会专门写一篇,其它的数据操作都类似。 三. 1.自定义内容提供器

public class MyContentProvider extends ContentProvider { @Override public boolean onCreate() { // 初始化内容提供器的时候调用,返回true时,初始化成功,否则失败。一般进行数据库的创建等 return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // 从内容提供器中查询数据,返回Cursor对象 return null; } @Override public String getType(Uri uri) { // 根据传入的URL来返回相应的MIME类型。 return null; } @Override public Uri insert(Uri uri, ContentValues values) { return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } }

MIME类型: - 1.以Vnd开头。 - 2.如果内容URI以路径结尾,则后接android.cursor.dir/,如果以id结尾,则接android.cursor.item/。 - 3.最后接上vnd..。 例如:vnd.android.cursor.dir/vnd.android.names 2.注意内容提供者一定要在AndroidMainfest.xml文件中注册才可以使用。 例如:

provider android:name=".MyContentProvider" android:authorities="com.example.app.contentprovider" android:enabled="true"<!-- 是否允许外部程序访问内容提供器 --> android:exported="true"><!-- 是否启用这个 内容提供器--> </provider>
转载请注明原文地址: https://www.6miu.com/read-21076.html

最新回复(0)