本文接着 “Android ContentProvider进程内通信” ContentProvider讲解进程间通讯


上文中添加配置


1. ContentProvider注册

<provider

            android:name=".provider.MyContentProvider"

            android:authorities="com.wjn.mycontentprovider"

            android:permission="com.wjn.provideraccess"

            android:enabled="true"

            android:exported="true">



设置ContentProvider的android:permission属性,该属性值可以任意指定一个字符串。通常使用程序的包名作为其中的一部分,这样可以避免和其他应用中的权限声明冲突。例如"com.wjn.provideraccess"。


2.对外声明前面使用的标签,表示这个应用发布了一个叫做com.wjn.provideraccess的权限

 <permission

        android:name="com.wjn.provideraccess"

        android:label="provider pomission"

        android:protectionLevel="normal"/>



以上也可ContentProvider还可以将访问的权限进一步细化,分成允许读取和允许写入两种。

当ContentProvider设置了读取的权限,那么其他组件想读取到该ContentProvider的内容时,就必须声明使用读的权限。

当ContentProvider设置了写入的权限,那么其他组件想写入该ContentProvider的内容时,就必须声明使用写的权限。


3.要访问上面进程的另外一个进程配置


3.1.声明权限

<uses-permission android:name="com.wjn.provideraccess" />


3.2.代码中使用(此处只测试了插入数据和查询数据,访问另外进程的数据,数据可能为空,所以要做非空判断)


3.2.1.插入数据

// 插入表中数据

ContentValues values = new ContentValues();

values.put("id", 1);

values.put("name", "詹姆斯(插入)");

values.put("describe", "大家好,我是詹姆斯(插入)!");

// 获取ContentResolver

ContentResolver resolver =  getContentResolver();

// 通过ContentResolver 根据URI 向ContentProvider中插入数据

if(null!=resolver){

       resolver.insert(uri_user,values);

  }

        


3.2.2.查询

// 获取ContentResolver

ContentResolver resolver =  getContentResolver();

if(null!=resolver){

   // 通过ContentResolver 向ContentProvider中查询数据

   Cursor cursor = resolver.query(uri_user, new String[]{"id","name","describe"}, null, null, null);

   StringBuilder sbBuilder=new StringBuilder();

   if(null!=cursor){

          while (cursor.moveToNext()){

               int id=cursor.getInt(cursor.getColumnIndex("id"));

               sbBuilder.append("ID:"+id+"\n");

               String name=cursor.getString(cursor.getColumnIndex("name"));

               sbBuilder.append("姓名:"+name+"\n");

               String describe=cursor.getString(cursor.getColumnIndex("describe"));

               sbBuilder.append("描述:"+describe+"\n\n\n");

          }

          Log.d("TAG","sbBuilder.toString()----:"+sbBuilder.toString());

          cursor.close();// 关闭游标

    }

}



4.结果

4.1.运行前节讲述的demo 插入一条数据 然后查询

Android ContentProvider进程间通信


4.2.运行新demo 查询上面demo的数据

Android ContentProvider进程间通信


4.3.在此demo中向上面一个demo插入一条数据后 再次查询

Android ContentProvider进程间通信



至此 ContentProvider 进程间简单的通讯就完成了!





补充:

ContentProvider的监听

Android ContentProvider进程间通信


相关文章:

  • 2021-08-24
  • 2022-01-11
  • 2021-07-26
  • 2021-12-29
  • 2021-09-19
  • 2022-12-23
猜你喜欢
  • 2021-10-12
  • 2021-12-12
  • 2018-07-10
  • 2021-11-01
  • 2021-11-12
  • 2018-02-23
相关资源
相似解决方案