当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控。这个任务,就由内容观察者来完成。下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发生改变的时候,去做相应的业务处理即可(这里只是打印log)
布局文件选择默认,因为用不到任何界面。
看一下主活动中的代码:
package com.itydl.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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册一个内容观察者,监听短信数据库内容的改变 ContentResolver cr = getContentResolver(); //uri:监听哪个uri上的内容提供者的通知,数据库的uri //notifyForDescendents:如果是true,那么只要以content://sms开头的uri的数据改变,都能收到通知,比如content://sms/inbox。其实写死true即可 //第三个参数:表示内容观察者的实例(这里继承ContentObserver实现类) 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) { // TODO Auto-generated method stub super.onChange(selfChange); System.out.println("短信数据库改变"); } } }
现在可以运行程序了,然后往模拟器或者手机上,发送一条短信,改变短信数据库。发现,每发送一条短信,或者接受一条短信,log就会输出。
时间: 2024-11-10 14:25:14