关于ContentProvider(二)

上篇说到了ContentProvider的基本使用方法,实现了软件之间的数据互通。然而,仅此是不够的。有时候我们会希望两个软件(A和B)共同使用同一个ContentProvider里面的数据,因此,我们需要在一定程度上需要知道另一个软件的行业。比如A希望知道B有没有操作ContentProvider,或者从A上次操作到现在ContentProvider的数据有没有发生变化。在此ContentProvider为我们提供了一个非常方便的方法,

notifyChange(Uri uri, ContentObserver observer);

其中第一个参数uri即是当前ContentProvider的Uri通过delete方法的参数传入。第二个参数表示指定的通知接收者,当输入null时表示不指定,所有接收者都可接收通知。

使用方法:

1、在ContentProvider中调用notifyChange方法

public int delete(Uri uri, String selection, String[] selectionArgs) {
        int result=111;
        switch (uriMatcher.match(uri)){
            case 1:
                temp=selection;
                this.getContext().getContentResolver().notifyChange(uri,null);

2、在使用ContentProvider的软件(如A)中,注册监听者public final void registerContentObserver(Uri uri, boolean notifyForDescendents,ContentObserver observer)

this.getContentResolver().registerContentObserver(uri1,true, new ChangeOb(new Handler()));

其中uri1为刚刚ContentProvider中的对应uri,第二个参数为当参数notifyForDescendents为true时,表示要监控所有以uri为前缀的URI对应的数据变化,第三个参数为监听到数据变化后的动作。

3、实现ChangeOb,即监听到数据变化后的动作。

private class ChangeOb extends ContentObserver{
        public ChangeOb(Handler handler) {
            super(handler);
        }
        public void onChange(boolean selfChange){
            String a=contentResolver.getType(uri1);
            //Toast.makeText(MainActivity.this, Integer.valueOf(result).toString(), Toast.LENGTH_SHORT).show();
            Toast.makeText(MainActivity.this, a , Toast.LENGTH_SHORT).show();
        }
    }

以上,即可监听ContentProvider的数据变化

时间: 2025-01-01 21:04:12

关于ContentProvider(二)的相关文章

Android 四大组件学习之ContentProvider二

上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是检验真理的唯一标准. 那我们就開始行动吧 第一步: 创建一个自己的ContentProvider,我取名为MyContentProvider public class MyContentProvider extends ContentProvider { @Override public int d

四大组件之ContentProvider(二)-轻轻松松自定义ContentProvider

第3节 自定义ContentProvider 自定义一个ContentProvider,需要 继承ContentProvider类重新创建一个类,并实现其中的一些方法: 在应用的AndroidManifest.xml文件中,声明这个新添加的组件: 但在这之前,我们要来设计一下外部访问它采用的地址. 3.1 地址设计 Uri的scheme字段是固定的,使用content:. authority定义成程序的包名com.anddle.mycontentprovider. path就像是网站内部的分类,

ContentProvider学习笔记

一.什么ContentProvider 二.如何使用ContentProvider 三.沙场练兵-实例操练 四.深入理解ContentProvider原理 为什么使用ContentProvider可以实现跨进程的通讯,第一反应肯定是这货和binder有关,因为android中只有稍微跟跨进程搭上边的,必定想到binder. 下面就来分析ContentProvider是怎么一步一步利用binder实现跨进程通信的: 1.首先你得创建一个ContentProvider运行在进程A,如上篇博客 And

Android 面试题总结之Android 基础(二)

Android 面试题总结之Android 基础ContentProvider(二) 在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识.有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心.然后我又重新整理了一遍.让大家阅读体验更好! 在阅读过程中有任何问题,请及时联系. 本章系<Android 之美 从0到1 – 高手之路>Android基础ContentProvider 总结了Android 开发者面试比较常见的C

Android随笔(一)

一.SQLite数据库 * 1.事务 beginTransaction();            // 开始事务 setTransactionSuccessful();    // 设置成功点, 在事务结束时, 成功点之前的操作会被提交 endTransaction();            // 结束事务, 通常放在finally中, 如果不显示关闭事务, 超时也会关闭, 但效率较低 * 2.另一种增删改查 SQLiteDatabase类中有insert(), delete(), upda

Android学习笔记二十.使用ContentProvider实现数据共享(二).URI...工具类

一.UriMatcher与ContentUris工具类 UriMatcher 1.功能概述 开发ContentProvider时所实现的query().insert().delete().update()方法的第一个参数为Uri参数,该参数由ContentResolver调用这些方法时传入.在上一篇博文中的实例,并没有真正对数据进行操作,因此ContentProvider并未对Uri参数进行任何判断.所以为了确定该ContentProvider实际能处理的Uri,以确定每个方法中Uri参数所操作

Android学习笔记二十一.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider

Android系统本身提供了大量的ContentProvider,例如联系人信息.系统的多媒体信息等,我们开发的应用程序主要是通过ContentResolver来调用系统的ContentProvider提供的query().insert().update()和delete()方法来获取Android内部的数据. 一.如何使用ContentResolver操作系统ContentProvider暴露的内部数据? 1.调用Activity的getContentResolver()获取ContentRe

Android学习笔记二十二.使用ContentProvider实现数据共享(五).监听ContentProvider的数据改变

一.使用ContentProvider管理多媒体内容 Android提供了Camera程序来支持拍照.拍摄视频,用户拍摄的相片.视频都将存放在固定的位置.Android同样为这些多媒体内容提供了ContentProvider,所以我们可以通过使用ContentProvider实现其他应用直接访问Camera所拍摄的照片.视频等. 1.多媒体ContentProvider的Uri (1)MediaStore.Audio.Media.EXTERNAL_CONTENT_URI:存储在外部存储器(SD卡

android 玩转ContentProvider之二--实现多个ContentProvider对多张表进行操作

SQLite数据库直接操作类: DatabaseHelper.java [java] view plaincopy package com.jacp.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import com.jacp.demo.provider.Provide

Android学习(十二) ContentProvider

一.ContentProvider简介       当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.而使用ContentProvider共享数据的好处是统一了数据访问方式. 二.如何实现Conte