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项目的数据库改变了");
}
});
} }
上一篇:一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色


下一篇:linux下批量查找/替换文本内容