contentProvider作为不同软件之间的数据共享,提供统一的接口,
contentProvider 主要功能是封装对数据库的增删改查,并可以对外提供结果,供其它应用程序访问本应用数据库里面的数据,首先我们要创建一个类继承ContentProvider,并且需要实现query,getType,insert,delste,update几个函数,在注册contentProvider指定一个authorities这个是唯一的,我们写contentProvider的时候需要一个操作数据库的类,
2.创建UriMatcher对象以及数据库操作对象,在增删改查的时候回从调用端传递Uri对象过来,在ContentProvider的增删改查的函数里,我们需要根据该uri来判断,是要操作一条数据,还是操作所有符合条件的数据
我们可以用个contentProvider知道数据的变化,使用registerContentObserver来注册一个观察者实例,当指定的uri发生改变时候,该实例会回调实例对象进行相应处理,这个特性尤其是不同进程之间的数据传输特别管用,因为sharepreference对于不同进程之前的数据的支持是非常糟糕的
class NotificationObserver extends ContentObserver { public NotificationObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); LogUtil.d("TAG", ">>>onchange uri=" + uri); String id = uri.getLastPathSegment(); String queryValue = uri.getQueryParameter(PemometerConstant.CONTPROVIDER_URI_QUERY); } }
注册的时候使用:
Uri notificationEnabledUri = Uri.parse("content://" + PedometerProvider.authory + "/notification/"); mNotificationObserver = new NotificationObserver(new Handler()); getContentResolver().registerContentObserver(notificationEnabledUri, true, mNotificationObserver);
发送通知的时候采用下面代码:
public static void notifyStepTargetChanged(Context context,int target) { LogUtil.d(TAG,"notifyStepTargetChanged target="+target); Uri uri = Uri.parse("content://com.babytree.apps.pregnancy.PedometerProvider/notification"); Uri resultUri = ContentUris.withAppendedId(uri, target); ContentResolver resolver = context.getContentResolver(); resolver.notifyChange(resultUri, null); }
当调用resolver.notifyChange的时候,另一个线程中注册了这个uri的类就能接受到发送的uri了
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦