Android开发之内容观察者

内容观察者:

当关注应用的数据库数据改变时,内容提供者会发出通知,在内容提供者的uri上注册一个内容观察者,就可以收到数据改变的通知

实现步骤:

1.假如是自定义的ContentProvider,需要在数据发送改变的方法中实现以下代码:

1 ContentResolver cr = getContext().getContentResolver();
2 //发出通知,所有注册在这个uri上的内容观察者都可以收到通知
3 cr.notifyChange(uri, null);
notifyChange(Uri uri, ContentObserver observer)
//参数uri:内容发送改变的uri
//参数observer:可以为null;假如指定为某个内容观察者,有点类似于广播的最终接收者;假如自己注册该内容观察者,为true
 
2.在想要接受该数据改变通知的地方,注册一个内容观察者
 1 import android.app.Activity;
 2 import android.content.ContentResolver;
 3 import android.database.ContentObserver;
 4 import android.net.Uri;
 5 import android.os.Bundle;
 6 import android.os.Handler;
 7 
 8 public class MainActivity extends Activity {
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14         initLinstener();
15     }
16 
17     private void initLinstener() {
18         ContentResolver cr=getContentResolver();
19         cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
20     }
21     
22     class MyObserver extends ContentObserver{
23 
24         public MyObserver(Handler handler) {
25             super(handler);
26         }
27         //内容观察者收到数据库发生改变的通知时,会调用此方法
28         @Override
29         public void onChange(boolean selfChange) {
30             super.onChange(selfChange);
31             System.out.println("短信数据库发送的改变!");
32         }
33     }
34     
35 }

registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)

 //参数uri:监听哪个uri上的内容提供者的通知
 //参数notifyForDescendents:false时,需要精准匹配;true时,需要是以uri开头的uri的数据改变,都能收到通知
 //参数observer:发送改变时回调的对象
需要实现一个MyObserver,实现ContentObserver。并实现该类中的onChange()方法。
原文地址:https://www.cnblogs.com/liyiran/p/5104840.html