通过自定义的ContentProvide可以访问私有数据,系统中也有许多ContentProvide,例如短信,联系人等
创建步骤:
1)先得创建数据库,通过SQLiteOpenHelper创建数据库,在onCreate方法中创建表
public class MySqlit extends SQLiteOpenHelper {
public MySqlit(Context context) {
super(context, "people", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(_id integer primary key autoincrement,name char(10),num char(11))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在MainActivity中
MySqlit sqlit=new MySqlit()
sqlit.getReadableDatabase();
这样就创建了数据表person
2)创建ContentProvide类,继承ContentProvide实现它的方法并重写,同时在xml文件中注册,注册时一定要指定authorities
public class MyProvider extends ContentProvider {
SQLiteDatabase db;
@Override
public boolean onCreate() {
MySqlit sqlit=new MySqlit(getContext());
db=sqlit.getReadableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Cursor cursor=db.query("person", projection, selection, selectionArgs, sortOrder, null, null);
return cursor;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", null, values);
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int i=db.delete("person", selection, selectionArgs);
return i;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
}
这时已经创建了ContentProvide,在其他应用中可以通过ContentResolver来访问数据,并对数据表操作
3)访问数据,操作数据表
插入数据
ContentResolver result=getContentResolver();
ContentValues values=new ContentValues();
values.put("name", "heizi");
values.put("num", "18829345933");
result.insert(Uri.parse("content://com.provider"), values);
查询数据
ContentResolver result=getContentResolver();
Cursor cursor=result.query(Uri.parse("content://com.provider"), null, null, null, null);
while(cursor.moveToNext()){
String name=cursor.getString(0);
String num=cursor.getString(1);
System.out.println("name:"+name+" "+"num:"+num);
}
4)系统的ContentProvide也可以通过此种凡是来查询,修改等操作
Uri可以到源码里查询