Android???????????????Content Provider

吾生也有涯,而知也无涯。这篇文章主要讲述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???????????????????????????                   
Android???????????????Content Provider

文章图片
                                 
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) {
//???????????????????????????????????????
}
}

 






















































































    推荐阅读