使用具体的代码实现实现通过ContentProvider,实现对另一个App的SqlList数据库中的数据表中的数据进行增删改查。 对数据进行增、删、改操作后,发出自定义广播,携带字符串(内容自定义),另一个App接收发出的自定义广播,获取广播中携带的字符串,存入数据表中,同时存入表中的字段还包括接收到广播的时间。(自己的APP既能发送自定义广播,也能接收另一个App的自定义广播)
时间: 2024-03-03 12:49:05 浏览: 97
首先,在提供数据的应用中,需要创建一个 ContentProvider 类,用于提供对数据库的访问接口。在 ContentProvider 类中需要实现如下几个方法:
1. onCreate() 方法:在此方法中初始化数据库。
2. query() 方法:用于查询数据。
3. insert() 方法:用于插入数据。
4. update() 方法:用于更新数据。
5. delete() 方法:用于删除数据。
在另一个应用中,需要注册一个 BroadcastReceiver 类,用于接收来自第一个应用发送的广播,并将广播中携带的数据存入数据库中。
下面是示例代码:
在提供数据的应用中:
```
public class MyContentProvider extends ContentProvider {
private DBHelper dbHelper;
private SQLiteDatabase db;
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext());
db = dbHelper.getWritableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor = db.query("table_name", projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
db.insert("table_name", null, values);
// 发送自定义广播
Intent intent = new Intent("com.example.myapp.MY_ACTION");
intent.putExtra("data", "insert data");
getContext().sendBroadcast(intent);
return uri;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int count = db.update("table_name", values, selection, selectionArgs);
// 发送自定义广播
Intent intent = new Intent("com.example.myapp.MY_ACTION");
intent.putExtra("data", "update data");
getContext().sendBroadcast(intent);
return count;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int count = db.delete("table_name", selection, selectionArgs);
// 发送自定义广播
Intent intent = new Intent("com.example.myapp.MY_ACTION");
intent.putExtra("data", "delete data");
getContext().sendBroadcast(intent);
return count;
}
@Override
public String getType(Uri uri) {
return null;
}
private class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "my_db";
private static final int DB_VERSION = 1;
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE table_name (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
```
在另一个应用中:
```
public class MyBroadcastReceiver extends BroadcastReceiver {
private DBHelper dbHelper;
private SQLiteDatabase db;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ("com.example.myapp.MY_ACTION".equals(action)) {
String data = intent.getStringExtra("data");
long time = System.currentTimeMillis();
dbHelper = new DBHelper(context);
db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("data", data);
values.put("time", time);
db.insert("table_name", null, values);
}
}
private class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "my_db";
private static final int DB_VERSION = 1;
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE table_name (_id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT, time INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
```
需要在 AndroidManifest.xml 文件中分别添加如下代码:
提供数据的应用:
```
<provider
android:name=".MyContentProvider"
android:authorities="com.example.myapp.provider"
android:exported="true" />
```
另一个应用:
```
<receiver
android:name=".MyBroadcastReceiver"
android:exported="true" >
<intent-filter>
<action android:name="com.example.myapp.MY_ACTION" />
</intent-filter>
</receiver>
```
需要注意的是,两个应用中的数据库表结构需要一致。
阅读全文