首页 > 代码库 > 关于ContentProvider(二)
关于ContentProvider(二)
上篇说到了ContentProvider的基本使用方法,实现了软件之间的数据互通。然而,仅此是不够的。有时候我们会希望两个软件(A和B)共同使用同一个ContentProvider里面的数据,因此,我们需要在一定程度上需要知道另一个软件的行业。比如A希望知道B有没有操作ContentProvider,或者从A上次操作到现在ContentProvider的数据有没有发生变化。在此ContentProvider为我们提供了一个非常方便的方法,
notifyChange(Uri uri, ContentObserver observer);
其中第一个参数uri即是当前ContentProvider的Uri通过delete方法的参数传入。第二个参数表示指定的通知接收者,当输入null时表示不指定,所有接收者都可接收通知。
使用方法:
1、在ContentProvider中调用notifyChange方法
public int delete(Uri uri, String selection, String[] selectionArgs) { int result=111; switch (uriMatcher.match(uri)){ case 1: temp=selection; this.getContext().getContentResolver().notifyChange(uri,null);
2、在使用ContentProvider的软件(如A)中,注册监听者public final void registerContentObserver(Uri uri, boolean notifyForDescendents,ContentObserver observer)
this.getContentResolver().registerContentObserver(uri1,true, new ChangeOb(new Handler()));
其中uri1为刚刚ContentProvider中的对应uri,第二个参数为当参数notifyForDescendents为true时,表示要监控所有以uri为前缀的URI对应的数据变化,第三个参数为监听到数据变化后的动作。
3、实现ChangeOb,即监听到数据变化后的动作。
private class ChangeOb extends ContentObserver{ public ChangeOb(Handler handler) { super(handler); } public void onChange(boolean selfChange){ String a=contentResolver.getType(uri1); //Toast.makeText(MainActivity.this, Integer.valueOf(result).toString(), Toast.LENGTH_SHORT).show(); Toast.makeText(MainActivity.this, a , Toast.LENGTH_SHORT).show(); } }
以上,即可监听ContentProvider的数据变化
关于ContentProvider(二)