Android ContentProvider实现应用间数据共享
在Android 中如果想想要在应用间通信,我们可以使用隐式Intent,BroadcastReceiver,AIDL,ContentProvider。
ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义一个类继承ContentProvider,然后覆写query、insert、update、delete 等方法。ContentProvider 是四大组件之一,我们还需要在AndroidManifest 文件中进行注册。
我们先建一个项目用于写入数据,在该项目中定义一个继承ContentProvider的类Myprovider,并在AndroidManifest 中注册:
<provider android:authorities="com.zhang.mycp" android:name="Myprovider" android:exported="true" />
public class Myprovider extends ContentProvider { public static final Uri URI = Uri.parse("content://com.zhang.mycp"); 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)"); 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) { database.insert("tab","_id",values); 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中写入数据
ContentValues values = new ContentValues(); values.put("name","Java"); getContentResolver().insert(Myprovider.URI,values); values.put("name","Swift"); getContentResolver().insert(Myprovider.URI,values); values.put("name","Python"); getContentResolver().insert(Myprovider.URI,values); values.put("name","C#"); getContentResolver().insert(Myprovider.URI,values);
创建另一个项目用来演示读取数据
Uri URI = Uri.parse("content://com.zhang.mycp"); Cursor cursor = getContentResolver().query(URI, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { String value = cursor.getString(cursor.getColumnIndex("name")); System.out.println(value + ">>>>>>>>>>>>>>>>>>>>"); } cursor.close(); }
运行结果: