minSdkVersion="8"/>
2.准备:
数据库(这只是内容提供者的一种形式,还可以是操作文件,如XML等等)
publicclassDBOpenHandlerextendsSQLiteOpenHelper{
/**
*@paramcontext当前应用上下文
*/
publicDBOpenHandler(Contextcontext){
super(context,"myAndroid.db",null,2);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
Stringsql_createTable="CREATETABLEperson(personidintegerprimarykeyautoincrement,name)";
db.execSQL(sql_createTable);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
Stringsql="ALTERTABLEpersonADDphone";
db.execSQL(sql);
db.execSQL("ALTERTABLEpersonADDamountinteger");
}
}
3.TContentProvider
/**
*内容提供者
*/
publicclassPersonContentProviderextendsContentProvider{
privatestaticfinalUriMatcherMATCHER=newUriMatcher(UriMatcher.NO_MATCH);
privatestaticfinalintPERSONS=1;
privatestaticfinalintPERSON=2;
privateDBOpenHandlerdbOpenHandler;
//静态初始化Uri匹配模式
static{
//content:
//wjh.android.provider.personprovider/person:
表示对person表所有数据进行操作
MATCHER.addURI("wjh.android.provider.personprovider","person",PERSONS);
//content:
//wjh.android.provider.personprovider/person/3:
表示对Perosn表Id为3的单体记录进行操作
MATCHER.addURI("wjh.android.provider.personprovider","person/#",PERSON);
}
/**
*其它应用可以通过此方法对内容提供者删除数据
*/
publicintdelete(Uriuri,Stringselection,String[]selectionArgs){
SQLiteDatabasedb=dbOpenHandler.getWritableDatabase();
intnum=0;
switch(MATCHER.match(uri)){
casePERSONS:
num=db.delete("person",selection,selectionArgs);
break;
casePERSON:
longid=ContentUris.parseId(uri);
Stringwhere="personid="+id;
if(selection!
=null&&!
"".equals(selection)){
where=where+"and"+selection;
}
num=db.delete("person",where,selectionArgs);
break;
default:
thrownewIllegalArgumentException("UnkownUri:
"+uri);
}
returnnum;
}
/**
*获取内容提供者内容的类型
*/
@Override
publicStringgetType(Uriuri){
SQLiteDatabasedb=dbOpenHandler.getWritableDatabase();
switch(MATCHER.match(uri)){
casePERSONS:
//vnd.android.cursor.dir:
集合类型
return"vnd.android.cursor.dir/person";
casePERSON:
//vnd.android.cursor.item:
单条记录
return"vnd.android.cursor.item/person";
default:
thrownewIllegalArgumentException("UnkownUri:
"+uri);
}
}
/**
*其它应用可以通过此方法对内容提供者添加数据
*/
publicUriinsert(Uriuri,ContentValuescontentValues){
SQLiteDatabasedb=dbOpenHandler.getWritableDatabase();
switch(MATCHER.match(uri)){
casePERSONS:
longrowid=db.insert("person","name",contentValues);
returnContentUris.withAppendedId(uri,rowid);
default:
thrownewIllegalArgumentException("UnkownUri:
"+uri);
}
}
publicbooleanonCreate(){
dbOpenHandler=newDBOpenHandler(getContext());
returntrue;
}
/**
*其它应用可以通过此方法对内容提供者查询数据
*/
publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,
StringsortOrder){
SQLiteDatabasedb=dbOpenHandler.getWritableDatabase();
switch(MATCHER.match(uri)){
casePERSONS:
returndb.query("person",projection,selection,selectionArgs,null,null,sortOrder);
casePERSON:
longid=ContentUris.parseId(uri);
Stringwhere="personid="+id;
if(selection!
=null&&!
"".equals(selection)){
where=where+"and"+selection;
}
returndb.query("person",projection,where,selectionArgs,null,null,sortOrder);
default:
thrownewIllegalArgumentException("UnkownUri:
"+uri);
}
}
/**
*其它应用可以通过此方法对内容提供者更新数据
*/
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs){
SQLiteDatabasedb=dbOpenHandler.getWritableDatabase();
intnum=0;
switch(MATCHER.match(uri)){
casePERSONS:
num=db.update("person",values,selection,selectionArgs);
break;
casePERSON:
longid=ContentUris.parseId(uri);
Stringwhere="personid="+id;
if(selection!
=null&&!
"".equals(selection)){
where=where+"and"+selection;
}
num=db.update("person",values,where,selectionArgs);
break;
default:
thrownewIllegalArgumentException("UnkownUri:
"+uri);
}
returnnum;
}
}
应用二:
用于测试访问应用一的内容提供者
1,AndroidManifest.xml
xmlversion="1.0"encoding="utf-8"?
>
android="
package="wjh.android.other"
android:
versionCode="1"
android:
versionName="1.0">
icon="@drawable/icon"android:
label="@string/app_name">
name="android.test.runner"/>
name=".OtherActivity"
android:
label="@string/app_name">
name="android.intent.action.MAIN"/>