内容提供者学习总结

一.
内容提供者(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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值