为了监听ContentProvider的数据变化,需要通过ContentResolver向指定Uri注册ContentObserver监听器。
ContentResolver提供了如下方法来注册监听器:
regsterContentObserver(Uri uri, boolean notifuForDescendents, ContentObserver observer)
参数说明:
uri
该监听器所监听的ContenProvider的Uri
notifyDescendents
如果该参数为true,假如注册监听的Uri为conten://abc
,那么Uri为content://abc/dec
、content://abc/def/ghi
的数据发生改变时都会出发该监听器,如果为false,那么只有content://abc
的数据发生改变时才会出发该监听器
observer
监听器实例
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new MyOberver(new Handler()));
}
// 自定义ContentObserver监听器
class MyOberver extends ContentObserver {
public MyOberver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"), null, null, null, null);
while (cursor.moveToNext()) {
Log.d("TTTT", "发送内容:" + cursor.getString(cursor.getColumnIndex("body")));
}
}
}
}