【Android】进程通信IPC——ContentProvider
16lz
2021-01-23
简介
内容提供者为应用程序提供内容,它封装数据并通过ContentResolver将其提供给应用程序。只有在多个应用间需要共享数据的时候才需要ContentProvider。Android已经为常见的一些数据提供了默认的ContentProvider。
数据提供者
-
Provider
ContentProvider需要在AndroidManifest.xml中声明。说明 authorities ported adPermission itePermission 注: ContentProvider的authorities必须是唯一的,两个APP不能声明相同的authorities,否则安装时会报错INSTALL_FAILED_CONFLICTING_PROVIDER
-
ContentProvider
继承ContentProvider,实现需要实现的方法(onCreate,getType,insert,delete,update,query)。@Override public boolean onCreate() { mContext = getContext(); mUserDBHelper = new UserDBHelper(mContext); db = mUserDBHelper.getWritableDatabase(); mUriMatcher.addURI(AUTHORITIES, PATH, CODE); return true; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { if (isMatch(uri)) { return db.delete(UserDBHelper.TABLE_USER, selection, selectionArgs); } return 0; } @Override public String getType(Uri uri) { // at the given URI. return null; } @Override public Uri insert(Uri uri, ContentValues values) { if (isMatch(uri)) { long id = db.insert(UserDBHelper.TABLE_USER, null, values); return ContentUris.withAppendedId(uri, id); } return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if (isMatch(uri)) { return db.query(UserDBHelper.TABLE_USER, projection, selection, selectionArgs, null, null, sortOrder); } return null; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { if (isMatch(uri)) { return db.update(UserDBHelper.TABLE_USER, values, selection, selectionArgs); } return 0; } /** * 是否是提供的数据访问 * @param uri * @return */ private boolean isMatch(Uri uri) { return CODE == mUriMatcher.match(uri); }
内容访问者
使用ContentResolver访问数据库,传入内容提供者的Uri。访问ContentProvider所在程序的时候会启动它的Application。
- 权限声明
根据需要在AndroidManifest.xml加入需要的读写权限。 - 数据操作
使用ContentResolver进行insert,delete,update,query操作getContentResolver().insert(uri, contentValues);getContentResolver().delete(mUri, "name like ?", new String[]{"visitor%"});getContentResolver().update(mUri, contentValues, "name like ?", new String[]{"visitor%"})getContentResolver().query(mUri, new String[]{"id", "name", "age", "address"}, null, null, null)
更多相关文章
- Android sqlite 数据库操作
- Android 自定义Listview 如何绑定Sqlite数据库数据
- Android的数据存储
- Android心得3.2--用SAX解析器解析xml文件内容
- Android APN的设置问题 默认“已起用数据” 关闭
- Android如何下抓取tcp数据包
- 学习笔记(01):FFmpeg打造Android万能音频播放器-OpenSL ES介绍并
- Android ContentProvider实现应用间数据共享