效果图:
应用一、写入应用 ContentWriter
创建类继承自 ContentProvider,
并且需要在 AndroidManifest.xml 中注册:
这里需设置 android:exported="true" ,该 provider 才能被外部调用;
使用 android:authorities 来设置 provider 的地址;
<provider
android:authorities="com.dingding.cp"
android:exported="true"
android:name="MyProvider"></provider>
MyProvider.java
使用数据库来处理数据:
初始化数据库;为数据库创建一个表;插入方法;查询方法;
//为外部应用提供数据
public class MyProvider extends ContentProvider{
public static final Uri URI = Uri.parse("content://com.dingding.cp");//AndroidManifest.xml中Provider的地址
SQLiteDatabase database ;
@Override
public boolean onCreate() {
//数据库初始化
database = getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE,null);
//注:(文件名,只能被当前类调用,...)
// 为数据库创建一个数据表
database.execSQL("create table tab( id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)");
//注:(tab(id 自增变量,name 是text型非空的)
return true;
}
//查询
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor =database.query("tab",null,null,null,null,null,null);
return cursor;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
//插入
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {//插入的是ContentValues
database.insert("tab","_id",values);
// database.close();
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
}
在MainActivity.java中,执行写入数据库:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
write();
}
});
}
/*写入数据库*/
public void write() {
ContentValues values = new ContentValues();
values.put("name","Java");
values.put("name","Swift");
values.put("name","Python");
values.put("name","C#");
//传递到数据库中
getContentResolver().insert(MyProvider.URI,values);
}
}
应用二、写入应用 ContentReader
这里,需要写入应用一中 provider 相应的 Uri 地址,才能进行读取数据操作:
数据库中插入光标cursor;光标移至开始位置;依次读取数据;
public class MainActivity extends AppCompatActivity {
Uri URI = Uri.parse("content://com.dingding.cp");//与ContentWriter中的地址要一样
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//插入
Cursor cursor = getContentResolver().query(URI, null, null, null, null);
cursor.moveToFirst();//将指针移至第一个
for (int i=0;i<cursor.getCount();i++) {
String value = cursor.getString(cursor.getColumnIndex("name"));
Toast.makeText(getApplicationContext(),value,Toast.LENGTH_SHORT).show();
cursor.moveToNext();//将指针移至下一个
}
}
}