Android  ContentProvider和ContentResolve

 

一、前言                                                                                    

        在Android平台中,各个Android 应用中可能需要互相传递数据。而ContentProvider类的作用就是在不同的应用之间进行数据的传递。Android中可以通过SQLiteDataBase、文件来进行数据的存储,其他应用可以通过这些存储或者通过SharePreferences去操作另外一个应用中的数据。但是有些资料中说这些会有严重的安全漏洞,至于是什么漏洞不清楚,个人只是觉得使用ContentProvider简单不是那么麻烦。

 

二、URI简介                                                                               

       URI在AndroidContentProvider中很重要,URI类似于网络中的URL,是一条字符串用于保存信息,或保存信息的地址。    对于一个URI:   content://com.milkz.providers.mytest/messages Uri uri = Uri.parse(content://com.milkz.providers.mytest/messages);   content://    <----   Android中规定的部分书写,类似于URL中的HTTP com.milkz.providers.mytest <------ 该部分为AndroidContentProvider的authorities。继承自ContentProvider的 类的包的路径。 messages <------ 访问的数据
 

三、ContentProvider简介                                                         

       ContentProvider需要自定义一个Class去继承(有的公司API可能会把ContentProvider改成一个abstract,此时就需要使用者灵活改变了),假设这个自定义的类名为myContentProvider,这个定义的类的作用就是为了向其他应用提供信息的类。类似于给BroadCastReciver发送广播通知的系统广播,myContentProvider就是向外散发一个信息,然后对它感兴趣的类会去获取这个信息。ContentProvider向外发送的信息主要通过URI来发送,将一些信息封装在URI中,发送出去。        继承于ContentProvider的类需要重写(有的公司的API修改了Google原生代码,可能就是实现接口了)

【ContentProvider中的六个方法】           boolean onCreate() 和activity、service一样,ContentProvider也需要一个onCreate()来对数据进行初始化,但是在该方法中,同样不可进行大量的逻辑运算,防止造成线程阻塞。但是onCreate只会启动一次。该方法会在ContentProvider创建的时候被调用,当其他应用第一次访问时,ContentProvider会被创建并且会调用该方法。         public Uri insert(Uri uri,ContentValues values)  uri:消息封装的uri values:该URI对应的值 用于向URI中插入消息         public int delete (Uri uri,String selection,String[] selectionArgs) 删除某条消息 public int update(Uri uri,ContentValues values,String selection,Stringp[] selectionArgs) 更新消息         public Cursor query(Uri uri,String[] projection ,String selectiion,String[] selectionArgs,String sortOrder) 类似于对数据库的操作,使用游标对数据进行一系列操作。通过获取游标来读取URI中的内容         public String getType(Uri uri) 返回当前uri所代表的数据MIME类型。 字符串以 vnd.android.cursor.dir/ 开头: 该URI包含多条记录 字符串以 vnd.android.cursor.item/ 开头: 该URI只包含一条记录    

四、ContentResolver                                                              

       ContentProvider是发送URI,对应的ContentResolver是用来接收信息并进行处理的,相比之下,ContentResolver并不需要太多的操作,直接在Content中使用getContentResolver() 来获取默认的ContentResolver对象。          该对象直接操作URI对应的ContentProvider中的方法,故它属于单例模式。一个Android源码中有大量的COntentProvider和ContentResolver,而URI就是连接对应的Provider和Resolver的利器。


五、在Androidmanifest中配置                                                

    <-----   该ContentProvider是否可以被其他应用调用。


六、URI工具类                                                                      

1)UriMatcher <-----  判断该URI能否被当前的ContentProvider处理

void addURI(String authority,String path,int code)    向URI中添加内容,也可以理解为注册URI,一个URI可以包含多个记录 authority+path = URI   code : 标识码 int match(Uri uri) 返回URI匹配的标识码,如果找不到则返回-1   使用: String s = content://com.milkz.providers.mytest/messages;   UriMatcher matcher = new uriMatcher(UriMatcher.NO_MATCH); matcher.addURI(s,message,1); int a = matcher.match(Uri.parse(s)); // a =1 matcher.addURI(s,message/#,1);//此处#代表任意的标识码 int b = matcher.match(Uri.parse(s/1));//b = 1


2) ContentUris <-----  操作Uri字符串的工具类

withAppendedld(URI uri,int id) 为uri加上id,即标识码 parseId(URI uri)    从指定的uri中解析出id       注:本文纯手打,文中有不对之处,请指出,谢谢。 博主原创,转载请标明出处,谢谢。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. android SQLiteDatebase 操作
  4. android 高斯模糊实现以及性能比较
  5. android 里 thumbdata3 数据格式
  6. Android(安卓)- SharedPreferences共享数据的相同Context
  7. 可以显示九天天气情况的天气预报哦-LINUX下JAVA自制服务器端,申请
  8. Android——ContentProvider总结
  9. Android开发架构模式MVP的简单思考

随机推荐

  1. Android(安卓)Layout XML属性
  2. 分析ARM ANDROID市场及技术结合点
  3. Android之网络请求8————OkHttp源码5:
  4. Android中ContentProvider简介
  5. android ImageView图片缩放
  6. android app 启动会白屏的解决办法
  7. xmlns:android="http://schemas.android.
  8. Android(安卓)启动过程详解
  9. Android(安卓)TabHost两种实现方式
  10. AppCompat v21 — Android(安卓)5.0之前