600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 内容提供者和内容观察者

内容提供者和内容观察者

时间:2022-06-16 22:10:46

相关推荐

内容提供者和内容观察者

1、创建一个内容提供者,继承contentProvider,作为四大组件之一,contentProvider需要在配置文件中进行配置

<provider android:name="cn.itcast.mobilesafe.provider.AppLockedProvider"android:authorities="cn.itcast.applockprovider"></provider>

2、

package cn.itcast.mobilesafe.provider;import cn.itcast.mobilesafe.db.dao.AppLockedDao;import android.content.ContentProvider;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import .Uri;import android.util.Log;/*** 这是程序锁的内容提供者* 当数据库中的数据发生变化,需要及时的更新数据* @author ygl**/public class AppLockedProvider extends ContentProvider {private static final int INSERT = 10;private static final int DELETE = 11;private static final String TAG = "AppLockedProvider";//定义一个uri的匹配码(不匹配时的返回值)private AppLockedDao appdao;private static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);private static Uri uriChange=Uri.parse("content://cn.itcast.applockprovider");static{matcher.addURI("cn.itcast.applockprovider", "insert", INSERT);matcher.addURI("cn.itcast.applockprovider", "delete", DELETE);}public boolean onCreate() {appdao=new AppLockedDao(getContext());return false;}public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubreturn null;}public String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}/** 当内容提供者发生数据插入操作,可以将数据插入到数据库中去* @see android.content.ContentProvider#insert(.Uri, android.content.ContentValues)*/public Uri insert(Uri uri, ContentValues values) {int result=matcher.match(uri);if(result==INSERT){String packname=(String) values.get("packname");Log.i(TAG, "要更改的包名为"+packname);//创建一个内容观察者去告诉内容提供者数据要进行改变 appdao.add(packname);getContext().getContentResolver().notifyChange(uriChange, null);}else{throw new IllegalArgumentException("uri地址不正确");}return null;}/** 当内容提供者发生数据删除操作时将数据从数据库中删除* @see android.content.ContentProvider#delete(.Uri, java.lang.String, java.lang.String[])*/public int delete(Uri uri, String selection, String[] selectionArgs) {int result=matcher.match(uri);if(result==DELETE){String packname=selectionArgs[0];appdao.delete(packname);getContext().getContentResolver().notifyChange(uriChange, null);}else{throw new IllegalArgumentException("uri地址不正确");}return 0;}public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;}}

3、通过内容提供者来进行数据的操作(lockAppActivity.java)

if(appDao.find(packageName)){//appDao.delete(packageName);//使用内容提供者来进行数据的操作 getContentResolver().delete(Uri.parse("content://cn.itcast.applockprovider/delete"), null, new String[]{packageName});iv_appLock.setImageDrawable(getResources().getDrawable(R.drawable.unlocked));}else{//appDao.add(packageName);//使用内容提供者来进行数据的操作 ContentValues cv= new ContentValues();cv.put("packname", packageName); getContentResolver().insert(Uri.parse("content://cn.itcast.applockprovider/insert"), cv);iv_appLock.setImageDrawable(getResources().getDrawable(R.drawable.locked));}

4、内容观察者观察内容提供者,检测里面的数据是否发生变化(AppLockService.java)

getContentResolver().registerContentObserver(Uri.parse("content://cn.itcast.applockprovider/insert"), true,new myObserve(new Handler()));

/** 内容观察者*/private class myObserve extends ContentObserver{public myObserve(Handler handler) {super(handler);}public void onChange(boolean selfChange) {super.onChange(selfChange);//当发现内容提供者里面的内容发生改变,则重新更新里面的内容packnamesList=appDao.getAllPackNames();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
内容提供者2

内容提供者2

2020-06-10

创建内容提供者

创建内容提供者

2019-08-09

内容提供者的概念

内容提供者的概念

2022-03-01

ContentProvider内容提供者

ContentProvider内容提供者

2019-11-03