public void addUri(String authority, String path, int code)
  • authority表示匹配的授权者名称;
  • path表示数据路径;
  • code表示返回代码。

下面咱搞个实例:

//这里的名称必须与AndroidManifest.xml中android:authorities保持一致

public static final String AUTHORITY = "com.scc.userprovider";

//数据路径

public static final String PATH_USERS = "user";

//访问ContentProvider的URL

public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + PATH_USERS);

//返回代码

public static final int USER_INFO = 1;

//创建UriMatcher对象

private static UriMatcher uriMatcher;

//创建静态代码块

static {    

  //实例化UriMatcher对象    

  uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);    

  //参数1:authority;参数2:路径;参数3:自定义代码    

  uriMatcher.addURI(UserInfoContent.AUTHORITY, UserInfoContent.PATH_USERS, USER_INFO);}
  1. 注册ContentProvider

在AndroidManifest.xml文件中的 application节点下使用标签注册。样例:

<!--

android:name指定ContentProvider实现的类名

android:authorities指定ContentProvider对应Uri(相当于ContentProvider分配一个域名)

android:exported指定ContentProvider是否允许其他应用调用。

如果将该属性设置为true,则允许其他应用调用-->

<android:authorities="com.scc.userprovider"    

android:name=".UserProvider"    

android:exported="true"/>

使用ContentProvider


  1. 通过insert()方法添加单条数据
ContentValues cv = new ContentValues();

cv.put(UserInfoContent._ID, bean.get_id());

cv.put(UserInfoContent.USER_NAME, bean.getName());

cv.put(UserInfoContent.USER_AGE, bean.getAge());

cv.put(UserInfoContent.USER_UPDATE_TIME, bean.getUpdate_time());

Uri uri = getContentResolver().insert(UserInfoContent.CONTENT_URI, cv);

Log.e(getClass().getName(), "insert:" + uri);
  • 通过bulkInsert()方法添加多条数据
ContentValues[] arrayValues = new ContentValues[10];

//实例化每一个ContentValues...

int count = getContentResolver().bulkInsert(UserInfoContent.CONTENT_URI, arrayValues);

android 解析yvu数据帧 安卓解析content路径_数据

  1. 指定ID删除单条数据
int delete = getContentResolver().delete(UserInfoContent.CONTENT_URI, "_id=12", null);

Log.e(getClass().getName(), "delete(失败返回-1):" + delete);
  • 通过selection语句删除多条数据
String selection = UserInfoContent._ID + ">12";

int result = getContentResolver().delete(UserInfoContent.CONTENT_URI, selection, null);

android 解析yvu数据帧 安卓解析content路径_数据_02

  1. 修改数据
UserInfoBean bean = new UserInfoBean("蚩尤", 32, "12:00");

ContentValues cv = new ContentValues();

cv.put(UserInfoContent.USER_NAME, bean.getName());

cv.put(UserInfoContent.USER_AGE, bean.getAge());

cv.put(UserInfoContent.USER_UPDATE_TIME, bean.getUpdate_time());

getContentResolver().update(UserInfoContent.CONTENT_URI, cv, "_id=18", null);

android 解析yvu数据帧 安卓解析content路径_android 解析yvu数据帧_03

  1. 查询数据
Cursor cursor = getContentResolver().query(UserInfoContent.CONTENT_URI, null, selection, null, null);

//循环取出游标指向的每条用户记录

while (cursor.moveToNext()) {

    UserInfoBean user = new UserInfoBean();

    user.name = cursor.getString(cursor.getColumnIndex(UserInfoContent.USER_NAME));

    user.age = cursor.getInt(cursor.getColumnIndex(UserInfoContent.USER_AGE));

    user._id = cursor.getString(cursor.getColumnIndex(UserInfoContent._ID));

    user.update_time = cursor.getString(cursor.getColumnIndex(UserInfoContent.USER_UPDATE_TIME)); 

   userList.add(user); //添加到用户信息列表

}

cursor.close(); //关闭数据库游标

Log.e(getClass().getName(), "Query用户:" + String.format("当前共找到%d个用户", userList.size()));

android 解析yvu数据帧 安卓解析content路径_数据_04

跨应用使用ContentProvider


跨应用和本应用使用ContentProvider一样的方法,这边就不做复制了。

例5的Uri是拼接字段,但是拼接后的结果 「content://com.scc.userprovider/user。」

跨平台使用getContentResolver().方法 的第一个参数:

「Uri uricontent = Uri.parse(“content://com.scc.userprovider/user”);」

ContentValues cv = new ContentValues();

cv.put(UserInfoContent._ID, bean.get_id());

cv.put(UserInfoContent.USER_NAME, bean.getName());

cv.put(UserInfoContent.USER_AGE, bean.getAge());

cv.put(UserInfoContent.USER_UPDATE_TIME, bean.getUpdate_time());

Uri uri = getContentResolver().insert(uricontent, cv);

Log.e(getClass().getName(), "insert:" + uri); 

### **写在最后**

最后我想说:对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,**从来都是我们去适应环境,而不是环境来适应我们!**

这里附上上述的技术体系图相关的几十套**腾讯、头条、阿里、美团等公司2021年的面试题**,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含**知识脉络 + 诸多细节**,由于篇幅有限,这里以图片的形式给大家展示一部分。

**相信它会给大家带来很多收获:**

![](https://img-blog.csdnimg.cn/img_convert/156e962cc5d7e78521796127e5b4cfd8.png)

![](https://img-blog.csdnimg.cn/img_convert/2299a1b4b372d7c61d8785b5309b82f5.png)

**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**

视频和PDF(实际上比预期多花了不少精力),包含**知识脉络 + 诸多细节**,由于篇幅有限,这里以图片的形式给大家展示一部分。

**相信它会给大家带来很多收获:**

[外链图片转存中...(img-pA2xxSWz-1630828656819)]

[外链图片转存中...(img-LJYJcFK0-1630828656821)]

**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**

> 当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。