,一个Uri由以下几部分组成: ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://主机名(或叫Authority)用于唯一标识这个...Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。...,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法: getContentResolver...表示只要发出通知的Uri以方法第一个参数开头都能被监听到,否侧监听uri必须与发出通知的uri完全匹配才能被监听到...把短信保存进数据库,并且发出一个数据变化通知,使用ContentObserver对数据变化进行监听,在用户发送短信时,就会被ContentObserver窃听到短信: 注册监听: getContentResolver
android:name = “ android.permission.READ_USER_DICTIONARY” > 3.2.2 构造查询条件 ContentProvider...查询和 SQL 查询是相似的,如下表对比: ContentProvider 查询 SQL 查询 作用 Uri FROM table_name 查询的数据集合 projection col,col,col...); } 4.3 UriMatcher UriMatcher 是用于自定义 ContentProvider 的工具类,主要作用是根据 Uri 匹配对应的数据表。...); } ContentObserver 用于监听 ContentProvider 中指定 Uri 标识数据的变化(增 / 删 / 改),使用时需要用到 ContentResolver 的两个方法: ContentResolver.java...通知 getContext().getContentResolver().notifyChange(uri, null); } } ---- 5.
APP端的时候,就可以通过该代理发送通知,双C/S模型在Android框架中非常常见。...,用于管理监听对象,主要是根据Uri的路径进行分组,既方便管理,同时又提高查找及插入效率,每个Uri路径对象对应一个节点,也就是一个ObserverNode对象,每个节点中维护一个监听List,而ContentService...从上面代码可以看出,其实就是两步,先搜集所有的Binder回调,之后通过回调通知APP端,搜集过程也是个递归的过程,也会存在父子粘连的一些回调逻辑(子Uri是否有必要通知路径中的父Uri回调),理解很简单...一个奇葩问题的注意事项 Binder循环调用 假设有这样一个场景: A进程notify A进程再收到通知 A进程请求获取ContentProvider的数据,并且ContentProvider位于A进程...如果将ContentProvider放到A进程之外的进程,就不会有问题,当然,Android提供了解决方案,那就是: <!
getType:得到数据类型 onCreate:创建数据时调用的回调函数 3、每个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider...public Uri insert(Uri uri, ContentValues values): 该方法用于供外部应用往ContentProvider添加数据。...如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver...1)每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。 ...insertedUserUri = ContentUris.withAppendedId(UserTableMetaData.CONTENT_URI, rowId); //通知监听器
处理用户交互: Activity 通过监听用户的触摸、点击等操作来响应用户的输入。...广播消息是一种全局的消息传递机制,用于通知应用程序发生了某些事件,比如设备电量低、网络连接改变等。 核心功能 接收广播: BroadcastReceiver 可以注册来接收系统或应用发出的广播消息。...ContentProvider 概述 ContentProvider 是一种用于在应用程序之间共享数据的机制。...它允许一个应用程序通过 ContentProvider 的接口访问另一个应用程序的数据,比如联系人、媒体文件等。ContentProvider 提供了标准的API来查询、插入、更新和删除数据。...{ // 查询数据 return null } override fun insert(uri: Uri, values: ContentValues?): Uri?
此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER...JOIN, 还有一些 ALTER TABLE 功能。...Android这么优秀的系统不会让这种情况发生的。解决这个问题主要靠ContentProvider。...定义一个名为CONTENT_URI,并且是public static final的Uri类型的类变量,你必须为其指定一个唯一的字符串值,最好的方案是以类的全名称, 如: public static final...我们可以通过使用ContentResover().notifyChange()方法来通知监听器关于数据更新的信息。 8.
(2)ConentUris类用于操作Uri路径后面的ID部分。..., values); 监听ContentProvider的数据改变 getContext().getContentResolver().notifyChange(uri, null); 当ContentProvider...所共享的数据发生了改变,这行代码能够通知全部注冊在改Uri上的监听者,为了在应用程序中监听ContentProvider数据的改变。...须要利用Android提供了ContentObserver基类。 监听ContentProvider数据改变的监听器须要继承ContentObserver类。...在使用的时候须要通过ContentProvider向指定的Uri注冊ContentObserver监听器。
= getContentResolver(); Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; //查询联系人数据...:name="android.permission.READ_CONTACTS"/> 4)查询指定电话的联系人信息 private void queryContact(String number){...后面追加ID Uri nameUri = ContentUris.withAppendedId(uri, rowId); //通知数据已经发生改变...的db数据库取出,用图形查看工具 查看即可发现插入数据,时间关系,就不演示结果了~ 通过ContentObserver监听ContentProvider的数据变化 ?...监听ContentProvider的数据变化,ContentProvider的内容就掌握得差不多 了.
ContentProvider类本身是个服务端的数据存取接口,主要操作类似SQLite,也都提供了如下常见的数据库管理API: query : 查询数据。 insert : 插入数据。...下面是query的具体参数说明: uri : Uri类型,可以理解为本次操作的数据表路径 projection : String[]类型,指定将要查询的字段名列表 selection : String...针对上面的问题,Android提供了ContentProviderOperation类,用于在一个事务中批量插入多条记录,这样即使出现失败,也会由ContentProviderOperation统一处理回滚事宜...notifyChange : 通知内容观察者发生了数据变化。...下面是两种监听方式在监听短信接收中的具体运用,监听结果消息使用了Notification推送到消息栏,有关Notification的使用说明参见《Android开发笔记(五十二)通知推送Notification
下面分别介绍Android系统提供了两个用于操作Uri的工具类:ContentUris和UriMatcher。...UriMatcher本质上是一个文本过滤器,用在contentProvider中帮助我们过滤,分辨出查询者想要查询哪个数据表。...public String getType(Uri uri) 该方法用于返回当前Url所代表数据的MIME类型。...4ContentResolver ContentResolver通过URI来查询ContentProvider中提供的数据。除了URI以 外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型。...发生数据变化时调用 getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者。
提供了3个用于辅助ContentProvide的工具类: ContentUris UriMatcher ContentObserver 4.5 ContentUris类 作用:操作 URI 具体使用...ContentProvider 中的数据变化 & 通知外界(即访问该数据访问者) 当ContentProvider 中的数据发生变化(增、删 & 改)时,就会触发该 ContentObserver类...类进行注册,并指定需要观察的URI // 步骤2:当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者) public class...实例说明 由于ContentProvider不仅常用于进程间通信,同时也适用于进程内通信 所以本实例会采用ContentProvider讲解: 进程内通信 进程间通信 实例说明:采用的数据源是Android..., values); // 当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者) mContext.getContentResolver
ContentProvider 中的数据变化 & 通知外界(即访问该数据访问者) 当ContentProvider 中的数据发生变化(增、删 & 改)时,就会触发该 ContentObserver...ContentResolver类进行注册,并指定需要观察的URI // 步骤2:当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者)...实例说明 由于ContentProvider不仅常用于进程间通信,同时也适用于进程内通信 所以本实例会采用ContentProvider讲解: 进程内通信 进程间通信 实例说明:采用的数据源是Android..., values); // 当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者) mContext.getContentResolver...运行需要访问数据的进程2 在进程2中,我们先向ContentProvider中插入数据,再查询数据 ? 至此,关于ContentProvider在进程内 & 进程间的使用讲解完毕。
[]) } <provider android:exported="true" android:name="com.itheima.contenProvider.provider.PersonContentPro...contentProvider屏蔽了数据存储的细节,用户只需要关心操作数据的URI就可以了,ContentProvider可以实现不同APP之间的共享。...Sql也有增删改查的方法,但是Sql只能查询本应用下的数据库。而ContentProvider还可以去增删改查本地文件。XML文件的读取等等。...4、说说ContentProvider、ContentResolver、ContentObserver之间的关系 a.ContentProvider内容提供者,用于对外提供数据 b.ContentResolver.notifyChange...(uri)发出信息 c.ContentResolver内存解析者,用于获取内容提供者提供的数据 d.ContentObserver内容观察者,可以监听数据的改变状态 e.ContentResolver.registerContentObserver
,也就是用于标示唯一的ContentProvider 表名(path):message,也就是对应的表名 记录(id):对应表中的数据,没有指定时数据全部返回。...帮助工具 UriMatcher 这是一个内置的URI工具,他一共只提供了两个开放方法addURI()、match(),这是一个用于帮助匹配ContentProvider中URI的方法,针对的是除去...// 通过ContentResolver类进行注册,并指定需要观察的URI getContentResolver().registerContentObserver(uri); //当数据发生变化时,通知外界...// 通知访问者 getContext().getContentResolver().notifyChange(uri, null); } } // 解除观察者(存在注册,自然的就要有对应的接触操作...) getContentResolver().unregisterContentObserver(uri) ContentProvider代码流程导读 工作流程: 从上文中的电话簿号码查询入手:
难点:需要手动设置账户,你如何骗你的用户给你手动设置账户完了之后不卸载你,必须联网 代码实现: ① 建立数据同步系统(ContentProvider) 通过一个ContentProvider...用来作数据同步,由于并没有实际数据同步,所以此处就直接建立一个空的ContentProvider即可 public class XXAccountProvider extends ContentProvider...android:contentAuthority 指定要同步的ContentProvider在其AndroidManifest.xml文件中有个android:authorities属性。...android:userVisible 设置是否在“设置”中显示 android:supportsUploading 设置是否必须notifyChange通知才能同步 android:allowParallelSyncs...- 添加账号则通过 [AccountManager.addAccount] - 查看是否存在账号通过 [AccountManager.getAccountsByType] 保活强度: 该方案适用于所有的
应用程序间的数据共享还有另外的一个重要话题,就是数据更新通知机制了。...1.2 如何访问自定义 ContentProvider ContentResolver 接口的 notifyChange 函数来通知那些注册了监控特定 URI的ContentObserver 对象,使得它们可以相应地执行一些处理...Sql 也有增删改查的方法, 但是 sql 只能查询本应用下的数据库。 而 ContentProvider 还可以去增删改查本地文件. xml 文件的读取等。...每一个 ContentProvider 都拥有一个公共的 URI ,这个 URI 用于表示这个 ContentProvider 所提供的数据。...将其分为 A,B,C,D 4个部分: A:标准前缀,用来说明一个 Content Provider 控制这些数据,无法改变的;"content://"; B:URI 的标识,用于唯一标识这个 ContentProvider
,系统会负责在相关事件发生的时候及时通知到该BroadcastReceiver,这种模式适合于这样的场景。某事件方式 -> 通知Broadcast ->启动相关处理应用。...而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用-> 监听事件 -> 发生时进行处理。...Content Provider ContentProvider,听着就和数据相关,没错,这就是Android提供的第三方应用数据的访问方案。...应用想对外提供的数据,可以通过派生ContentProvider类, 封装成一枚ContentProvider,每个ContentProvider都用一个uri作为独立的标识,形如:content://...查询到的结果,以Cursor(参见:reference/android/database/Cursor.html)的形式进行返回,调用者可以移动Cursor来访问各列的数据。
ContentService可以看做Android中一个系统级别的消息中心,可以说搭建了一个系统级的观察者模型,APP可以向消息中心注册观察者,选择订阅自己关心的消息,也可以通过消息中心发送信息,通知其他进程...APP端的时候,就可以通过该代理发送通知,双C/S模型在Android框架中非常常见。...,用于管理监听对象,主要是根据Uri的路径进行分组,既方便管理,同时又提高查找及插入效率,每个Uri路径对象对应一个节点,也就是一个ObserverNode对象,每个节点中维护一个监听List,而ContentService...通知流程 前文已经说过,ContentService可以看做是通知的中转站,进程A想要通知其他注册了某个Uri的进程,必须首先向ContentService分发中心发送消息,再由ContentService...从上面代码可以看出,其实就是两步,先搜集所有的Binder回调,之后通过回调通知APP端,搜集过程也是个递归的过程,也会存在父子粘连的一些回调逻辑(子Uri是否有必要通知路径中的父Uri回调),理解很简单
:persistent=“true” d) 覆写Service的onDestroy方法 e) 监听一堆系统静态广播 f) 监听第三方应用的静态广播 g) AlarmManager...难点:需要手动设置账户,你如何骗你的用户给你手动设置账户完了之后不卸载你,必须联网 代码实现: ① 建立数据同步系统(ContentProvider) 通过一个ContentProvider...指定要同步的ContentProvider在其AndroidManifest.xml文件中有个android:authorities属性。 ...android:userVisible 设置是否在“设置”中显示 android:supportsUploading 设置是否必须notifyChange通知才能同步 android:allowParallelSyncs...添加账号则通过[AccountManager.addAccount] - 查看是否存在账号通过[AccountManager.getAccountsByType] 保活强度: 该方案适用于所有的
String):用于查询指定Uri的ContentProvider,返回一个Cursor public Uri insert(Uri, ContentValues):依据指定的Uri加入数据到ContentProvider...中 public int update(Uri, ContentValues, String, String[]):用于更新指定Uri的ContentProvider中的数据 public int...delete(Uri, String, String[]):依据Uri删除指定的数据 public String getType(Uri):用于返回指定的Uri中的数据的MIME类型 *假设操作的数据属于集合类型...query(Uri uri,String[]projection,String selection,String[]selectionArgs,String sortOrder):查询Uri相应的ContentProvider...:"+uri); } //通知数据已经改变 getContext().getContentResolver().notifyChange(uri, null); return num;
领取专属 10元无门槛券
手把手带您无忧上云