zoukankan      html  css  js  c++  java
  • 关于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的数据变化

  • 相关阅读:
    制作企业IT解决方案的几项训练
    Community Server 1.0 Beta安装使用记录
    SharePoint Portal Server定制之区域模板定义
    从售前工作的角度了解SharePoint产品和技术
    活动目录的应用组策略
    企业客户组织结构在售前工作中的作用
    Community Server 1.0 Beta安装使用记录(二)
    2004年钢铁行业信息化现状
    IT解决方案编写小结
    关于软件系统架构设计的一些新思想
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4204331.html
Copyright © 2011-2022 走看看