红色部分较重要的
private static final int STUDENTS = 1;
private static final int STUDENT = 2;
private static final String TAG = "StudentProvider";
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
private DBOpenHelper dbOpenHelper;
static{
matcher.addURI("com.itpc.dbtest04.providers.studentprovider", "student", STUDENTS);
matcher.addURI("com.itpc.dbtest04.providers.studentprovider", "student/#", STUDENT);
}
@Override
public boolean onCreate() {
dbOpenHelper = new DBOpenHelper(getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
switch (matcher.match(uri)) {
case STUDENTS:
Log.i(TAG, "STUDENTS");
return db.query("student", null, null, null, null, null, "id asc");
case STUDENT:
Long id = ContentUris.parseId(uri);
String where = "id = "+id;
if(selection != null && !"".equals(selection.trim())){
where += " and " + selection;
}
Log.i(TAG, "STUDENT");
return db.query("student", null, where, selectionArgs, null, null, "id asc");
default:
throw new IllegalArgumentException("Unknow Uri:"+uri);
}
}
<provider android:name=".StudentProvider" android:authorities="com.itpc.dbtest04.providers.studentprovider" />
ContentResolver resolver = getContext().getContentResolver();
Uri uri = Uri.parse("content://com.itpc.dbtest04.providers.studentprovider/student/2");
Cursor cursor = resolver.query(uri, null, null, null, null);
==========================
从C应用往A应用添加一条记录,
用B应用来获得A应用数据的变化
A应用
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
switch (matcher.match(uri)) {
case STUDENTS:
db.insert("student", null, values);
//监听数据变化
getContext().getContentResolver().notifyChange(uri, null);
Log.i(TAG, "保存成功");
break;
default:
throw new IllegalArgumentException("Unknow uri:"+uri);
}
return null;
}
(B)监听的应用
Uri uri = Uri.parse("content://com.itpc.providers.studentprovider/student");
this.getContentResolver().registerContentObserver(uri, true, new StudentContentObserver(new Handler()));
public final class StudentContentObserver extends ContentObserver{
public StudentContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
Uri uri = Uri.parse("content://com.itpc.providers.studentprovider/student");
ContentResolver resolver = getApplicationContext().getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, "id desc limit 1");
if(cursor.moveToFirst()){
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.i(TAG, "其他应用:"+name);
}
}
}
C应用代码省略
分享到:
相关推荐
ContentProvider是Android系统中的四大组件之一,它是Android应用程序间数据共享的主要机制。通过ContentProvider,一个应用可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在Android的封闭...
为了进一步了解这个例子,你需要查看并分析`CPTest`中的具体实现。 总结来说,ContentProvider监听的例子主要涉及了如何创建ContentProvider、在AndroidManifest.xml中声明Provider、使用ContentObserver监听数据...
- 分析源码有助于开发者深入理解ContentProvider的工作流程,提升数据管理能力。 6. APK 文件: - 提供的APK文件可能是包含该ContentProvider的示例应用,安装后可以实际操作和测试ContentProvider的功能,观察其...
ContentProvider的源码分析对于深入理解Android系统的数据管理机制至关重要。本文将详细探讨ContentProvider的工作原理、实现机制以及源码中的关键组件。 首先,ContentProvider的核心功能是为其他应用程序提供一个...
十、ContentProvider2-master项目分析 ContentProvider2-master可能是一个示例项目,用于演示如何创建和使用ContentProvider客户端。该项目可能包含一个自定义的ContentProvider实现,以及一个或多个客户端应用,...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据。ContentProvider作为一个桥梁,使得其他应用...通过分析"ContentProviderDemo"中的代码,开发者可以更深入地了解这一组件的运作机制。
9. **实例分析** 博文链接中提到的"sunzone.iteye.com/blog/1884167"可能详细介绍了如何根据上述步骤创建一个自定义的ContentProvider。通过阅读这个博客,你可以获取具体的代码示例和实现细节。 10. **最佳实践**...
通过分析和学习这个“ContentProvider完整例子”,你可以了解到如何构建和使用ContentProvider,这对于实现跨应用的数据共享至关重要。同时,这也是一种提升应用可扩展性和模块化的好方式,因为数据的存储和访问被...
5. **Activity、Service、BroadcastReceiver和ContentProvider分析**:Androguard揭示了Android四大组件的定义和关联,帮助我们理解APK如何与其他应用和服务进行交互。 6. **Intent过滤器分析**:Androguard能解析...
通过分析和实践"ContentProviderDemo",你可以了解到如何创建自定义ContentProvider,如何结合SQLite数据库,以及如何在应用程序中使用ContentResolver进行数据操作。这将有助于提升你在Android开发中的数据管理能力...
分析这个文件,你可以了解应用是如何组织和存储数据的。通常,你可以使用一些数据库查看工具,如 DB Browser for SQLite,来打开并检查这个.db文件的内容。 总结起来,SQLite 和 ContentProvider 是 Android 应用中...
5. **示例代码分析** 压缩包中的示例代码应包含一个自定义ContentProvider的实现,展示了如何处理数据操作。同时,还有一个客户端应用,演示了如何使用ContentResolver查询和操作由ContentProvider提供的数据。 6....
六、ContentProvider源码分析 ContentProvider的源码中,`onCreate()`方法是在ContentProvider启动时调用,通常用来初始化数据库或进行其他设置。`query()`, `insert()`, `update()`, `delete()`方法根据传入的URI...
ContentProvider是Android系统中的四大组件之一,它是Android应用程序之间数据共享的...这个demo为我们提供了一个学习和实践ContentProvider的好机会,通过分析和运行代码,我们可以更深入地理解和掌握这一核心功能。
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。...通过分析和实践这个例子,开发者能更好地理解和掌握ContentProvider的使用,提升应用程序的互操作性和数据管理能力。
在Android开发中,ContentProvider是系统提供的一种数据共享机制,它可以跨应用地访问和操作数据。而`AsyncQueryHandler`是Android系统提供的一个辅助类,用于在ContentProvider中执行异步查询操作,避免阻塞主线程...
ContentProvider是android的四大组件之一,同时与SharedPreferences、IO、SQLite、网络共同构成了五种android存储技术。是android定义的一个管理访问结构化数据机制。android支持的Sqlite是不支持跨进程、跨应用访问...
通过分析和学习这些代码,可以加深对Android ContentProvider机制的理解,掌握如何在实际项目中构建和使用ContentProvider。 总之,Android的ContentProvider是实现跨应用数据共享的关键组件。通过创建自定义的...