吾生也有涯,而知也无涯。这篇文章主要讲述Android???????????????Content Provider相关的知识,希望能为你提供帮助。
???????????????
style
??????
http
path
??????
boolean
value
ada
Content Provider
ContentProvider???android???????????????????????????????????????????????????????????????ContentProvider???????????????????????????????????????????????????????????????????????????ContentProvider??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Context.MODE_WORLD_READABLE???Context.MODE_WORLD_WRITEABLE??????????????????????????????????????????????????????????????????ContentProvider????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????xml???????????????????????????????????????xml?????????????????????????????????sharedpreferences???????????????????????????sharedpreferences API???????????????
??????ContentProvider???????????????????????????????????????????????????????????????
?????????????????????ContentProvider?????????????????????????????????????????????ContentProvider????????????????????????
public class PersonContentProvider extends ContentProvider{
public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)
}
??????????????????AndroidManifest.xml??????< provider> ??????ContentProvider????????????????????????????????????????????????ContentProvider ???ContentProvider?????????authorities????????????/????????????????????????????????????????????????ContentProvider??????????????????????????????????????????????????????????????????authorities ?????????????????????
< manifest.... >
< application android:icon="@drawable/icon" android:label="@string/app_name">
< provider android:name=".PersonContentProvider"
android:authorities="com.ljq.providers.personprovider"/>
< /application>
< /manifest>
??????Uri??????
Uri??????????????????????????????Uri?????????????????????????????????1??????????????????ContentProvider ???2??????ContentProvider???????????????????????????????????????Uri???????????????????????????
文章图片
ContentProvider????????????????????????scheme?????????Android???????????? scheme??????content://
??????????????????Authority???????????????????????????ContentProvider?????????????????????????????????????????????????????????
?????????path?????????????????????????????????????????????????????????????????????????????????????????????:
?????????person??????id???10???????????????????????????????????????:/person/10
?????????person??????id???10????????????name????????? person/10/name
?????????person???????????????????????????????????????????????????:/person
?????????xxx?????????????????????????????????????????????:/xxx
????????????????????????????????????????????????????????????????????????xml???????????????????????????????????????:
?????????xml?????????person????????????name???????????????????????????????????????/person/name
????????????????????????????????????Uri???????????????Uri?????????parse()??????????????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")
??????UriMatcher???????????????
??????Uri????????????????????????????????????????????????????????????Uri?????????Uri??????????????????Android?????????????????????????????????Uri????????????????????????UriMatcher???ContentUris ????????????????????????????????????????????????????????????
UriMatcher???????????????Uri????????????????????????
?????????????????????????????????Uri????????????????????????????????????
//??????UriMatcher.NO_MATCH???????????????????????????????????????
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//??????match()????????????content://com.ljq.provider.personprovider/person???????????????????????????1
sMatcher.addURI("com.ljq.provider.personprovider", "person", 1); //??????????????????uri????????????????????????????????????
//??????match()????????????content://com.ljq.provider.personprovider/person/230???????????????????????????2
sMatcher.addURI("com.ljq.provider.personprovider", "person/#", 2); //#???????????????
switch (sMatcher.match(Uri.parse("content://com.ljq.provider.personprovider/person/10"))) {
case 1
break;
case 2
break;
default://?????????
break;
}
????????????????????????Uri?????????????????????sMatcher.match(uri)??????????????????Uri??????????????????????????????????????????????????????????????????addURI()?????????????????????????????????????????????content://com.ljq.provider.personprovider/person??????????????????????????????1
??????ContentUris???????????????
ContentUris???????????????Uri???????????????ID?????????????????????????????????????????????
withAppendedId(uri, id)?????????????????????ID?????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//????????????Uri??????content://com.ljq.provider.personprovider/person/10
parseId(uri)??????????????????????????????ID?????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri); //??????????????????:10
????????????ContentProvider????????????
ContentProvider???????????????????????????
public boolean onCreate()???????????????ContentProvider???????????????????????????Android????????????ContentProvider??????????????????????????????????????????????????????
public Uri insert(Uri uri, ContentValues values)????????????????????????????????????ContentProvider???????????????
public int delete(Uri uri, String selection, String[] selectionArgs)????????????????????????????????????ContentProvider???????????????
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)???????????????????????????????????????ContentProvider???????????????
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)????????????????????????????????????ContentProvider??????????????????
public String getType(Uri uri)??????????????????????????????Url??????????????????MIME?????????
????????????????????????????????????????????????MIME????????????????????????vnd.android.cursor.dir/?????????
????????????????????????person?????????Uri???content://com.ljq.provider.personprovider/person??????????????????MIME???????????????????????????"vnd.android.cursor.dir/person"???
????????????????????????????????????????????????????????????MIME????????????????????????vnd.android.cursor.item/?????????
???????????????id???10???person?????????Uri???content://com.ljq.provider.personprovider/person/10??????????????????MIME?????????????????????"vnd.android.cursor.item/person"???
????????????ContentResolver??????ContentProvider????????????
????????????????????????ContentProvider???????????????????????????????????????????????????????????????????????????ContentResolver ????????????????????????ContentResolver ?????????????????????Activity?????????getContentResolver()????????? ContentResolver ???????????????ContentProvider?????????????????????????????????
public Uri insert(Uri uri, ContentValues values)?????????????????????ContentProvider???????????????
public int delete(Uri uri, String selection, String[] selectionArgs)?????????????????????ContentProvider???????????????
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)????????????????????????ContentProvider???????????????
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)?????????????????????ContentProvider??????????????????
?????????????????????????????????Uri?????????????????????ContentProvider??????????????????????????????????????????
【Android???????????????Content Provider】?????????????????????Uri.parse("content://com.ljq.providers.personprovider/person/10")??????????????????????????????com.ljq.providers.personprovider???ContentProvider?????????????????????????????????person??????id???10????????????
??????ContentResolver???ContentProvider????????????????????????????????????????????????????????????
ContentResolver resolver =getContentResolver();
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person");
//??????????????????
ContentValues values = new ContentValues();
values.put("name", "linjiqin");
values.put("age", 25);
resolver.insert(uri, values);
//??????person??????????????????
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//???id???1????????????name?????????????????????zhangsan
ContentValues updateValues = new ContentValues();
updateValues.put("name", "zhangsan");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//??????id???2?????????
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);
????????????ContentProvider??????????????????
??????ContentProvider????????????????????????ContentProvider????????????????????????????????????ContentProvider???????????????????????????getContentResolver().notifyChange(uri, null)?????????????????????URI?????????????????????????????????
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
??????ContentProvider?????????????????????????????????????????????????????????ContentObserver????????????????????????uri??????????????????????????????????????????????????????????????????????????????ContentObserver???onChange()?????????
getContentResolver().registerContentObserver(Uri.parse("content://com.ljq.providers.personprovider/person"),true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
//???????????????????????????????????????
}
}
推荐阅读
- Android跨进程通信AIDL服务
- Android跨进程通信访问其他应用程序的Activity
- audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题
- POJ2773Happy2006题解--数论好题
- 基于Android平台的图书管理系统的制作
- netAPP存储恢复删除数据方法-留着万一有用呢
- android开发环境搭建
- DK:安卓车牌识别/Android车牌识别SDK/Android车牌识别软件
- 腾讯开源的Android UI框架——QMUI Android