• android103 内容观察者


    #内容观察者
    * 通过内容提供者可以访问到数据库,当数据库数据改变时,内容提供者会发出通知,在内容提供者的uri上注册一个内容观察者,就可以收到数据改变的通知,类似于广播接受者,但是他不是广播。
    
            cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
            
            class MyObserver extends ContentObserver{
    
                public MyObserver(Handler handler) {
                    super(handler);
                    // TODO Auto-generated constructor stub
                }
        
                //内容观察者收到数据库发生改变的通知时,会调用此方法
                @Override
                public void onChange(boolean selfChange) {
    
                }
            
            }
    * 在内容提供者中发通知的代码
    
            ContentResolver cr = getContext().getContentResolver();
            //发出通知,所有注册在这个uri上的内容观察者都可以收到通知
            cr.notifyChange(uri, null);
    package com.itheima.contentobserver;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.ContentObserver;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
        /*
        01项目当数据库改变时:发送数据改变的通知,uri:通知发送到哪一个uri上,所有注册在这个uri上的内容观察者都可以收到这个通知
        getContext().getContentResolver().notifyChange(uri, null);
        */
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //注册一个内容观察者,监听短信数据库内容的改变
            ContentResolver cr = getContentResolver();
            //uri:监听哪个uri上的内容提供者的通知
            //notifyForDescendents:如果是true,那么只要以content://sms开头的uri的数据库数据改变,都能收到通知,比如content://sms/inbox,如果是false则只能收到content://sms的地址的数据改变,
            cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
        }
        
        class MyObserver extends ContentObserver{
            public MyObserver(Handler handler) {
                super(handler);
            }
            
            //收到数据改变的通知,此方法调用
            @Override
            public void onChange(boolean selfChange) {
                super.onChange(selfChange);
                System.out.println("短信数据库改变");
            }
        }
    }
    package com.itheima.listener;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.app.Activity;
    import android.database.ContentObserver;
    import android.view.Menu;
    //08项目
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //注册内容观察者
            getContentResolver().registerContentObserver(Uri.parse("content://com.itheima.people"), true, 
                    new ContentObserver(new Handler()) {
                            @Override
                            public void onChange(boolean selfChange) {
                                // TODO Auto-generated method stub
                                super.onChange(selfChange);
                                System.out.println("01项目的数据库改变了");
                            }
                    });
        }
    
    
        
    }
  • 相关阅读:
    glusterFS空间不够了怎么办
    openshift安装部署
    ELK 安装部署小计
    Android框架汇集
    Android项目实战(四十六):Usb转串口通讯(CH34xUARTDriver)
    Android项目实战(四十五):Zxing二维码切换横屏扫描
    Android项目实战(三十九):Android集成Unity3D项目(图文详解)
    Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
    Android项目实战(二十九):酒店预定日期选择
    Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
  • 原文地址:https://www.cnblogs.com/yaowen/p/4973162.html
Copyright © 2020-2023  润新知