• 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项目的数据库改变了");
                            }
                    });
        }
    
    
        
    }
  • 相关阅读:
    web site 和 web application的区别
    Windows Phone开发(10):常用控件(上)
    WPF绑定ListBox
    Cookies的实际存储位置
    parse_str() 函数把查询字符串解析到变量中。
    str_repeat() 函数把字符串重复指定的次数。
    搭建Git本地服务器
    windows下github 出现Permission denied (publickey).解决方法
    ReadSolve 规格严格
    Scp命令(转载) 规格严格
  • 原文地址:https://www.cnblogs.com/yaowen/p/4973162.html
Copyright © 2020-2023  润新知