• 关于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的数据变化

  • 相关阅读:
    支持复制粘贴word公式的wangEditor编辑器
    支持复制粘贴word公式的KindEditor编辑器
    支持复制粘贴word公式的CKEditor编辑器
    支持复制粘贴word公式的百度HTML编辑器
    支持复制粘贴word公式的百度Web编辑器
    PHP 大文件上传分享(500M以上)
    PHP 大文件上传问题(500M以上)
    SAP ABAP报表依赖设计原理详解
    获得某个时间段内修改过的所有ABAP对象列表
    FLINK实例(13):Flink的重启策略(一)
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4204331.html
Copyright © 2020-2023  润新知