`
guochongcan
  • 浏览: 326778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ContentProvider分析

 
阅读更多

 

红色部分较重要的

 

	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

    ContentProvider是Android系统中的四大组件之一,它是Android应用程序间数据共享的主要机制。通过ContentProvider,一个应用可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在Android的封闭...

    contentProvider监听的例子

    为了进一步了解这个例子,你需要查看并分析`CPTest`中的具体实现。 总结来说,ContentProvider监听的例子主要涉及了如何创建ContentProvider、在AndroidManifest.xml中声明Provider、使用ContentObserver监听数据...

    ContentProvider 实战源码以及apk

    - 分析源码有助于开发者深入理解ContentProvider的工作流程,提升数据管理能力。 6. APK 文件: - 提供的APK文件可能是包含该ContentProvider的示例应用,安装后可以实际操作和测试ContentProvider的功能,观察其...

    ContentProvider源码

    ContentProvider的源码分析对于深入理解Android系统的数据管理机制至关重要。本文将详细探讨ContentProvider的工作原理、实现机制以及源码中的关键组件。 首先,ContentProvider的核心功能是为其他应用程序提供一个...

    ContentProvider客户端

    十、ContentProvider2-master项目分析 ContentProvider2-master可能是一个示例项目,用于演示如何创建和使用ContentProvider客户端。该项目可能包含一个自定义的ContentProvider实现,以及一个或多个客户端应用,...

    ContentProvider示例

    在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据。ContentProvider作为一个桥梁,使得其他应用...通过分析"ContentProviderDemo"中的代码,开发者可以更深入地了解这一组件的运作机制。

    Android 之 自定义ContentProvider的使用

    9. **实例分析** 博文链接中提到的"sunzone.iteye.com/blog/1884167"可能详细介绍了如何根据上述步骤创建一个自定义的ContentProvider。通过阅读这个博客,你可以获取具体的代码示例和实现细节。 10. **最佳实践**...

    ContentProvider完整例子

    通过分析和学习这个“ContentProvider完整例子”,你可以了解到如何构建和使用ContentProvider,这对于实现跨应用的数据共享至关重要。同时,这也是一种提升应用可扩展性和模块化的好方式,因为数据的存储和访问被...

    androguard-master.zip

    5. **Activity、Service、BroadcastReceiver和ContentProvider分析**:Androguard揭示了Android四大组件的定义和关联,帮助我们理解APK如何与其他应用和服务进行交互。 6. **Intent过滤器分析**:Androguard能解析...

    从头学Android之ContentProvider示例源代码

    通过分析和实践"ContentProviderDemo",你可以了解到如何创建自定义ContentProvider,如何结合SQLite数据库,以及如何在应用程序中使用ContentResolver进行数据操作。这将有助于提升你在Android开发中的数据管理能力...

    android对sqlite、contentprovider的例子

    分析这个文件,你可以了解应用是如何组织和存储数据的。通常,你可以使用一些数据库查看工具,如 DB Browser for SQLite,来打开并检查这个.db文件的内容。 总结起来,SQLite 和 ContentProvider 是 Android 应用中...

    ContentProvider 内容提供者完整代码

    5. **示例代码分析** 压缩包中的示例代码应包含一个自定义ContentProvider的实现,展示了如何处理数据操作。同时,还有一个客户端应用,演示了如何使用ContentResolver查询和操作由ContentProvider提供的数据。 6....

    Android ContentProvider 使用详解源码

    六、ContentProvider源码分析 ContentProvider的源码中,`onCreate()`方法是在ContentProvider启动时调用,通常用来初始化数据库或进行其他设置。`query()`, `insert()`, `update()`, `delete()`方法根据传入的URI...

    ContentProvider

    ContentProvider是Android系统中的四大组件之一,它是Android应用程序之间数据共享的...这个demo为我们提供了一个学习和实践ContentProvider的好机会,通过分析和运行代码,我们可以更深入地理解和掌握这一核心功能。

    Android之ContentProvider事例

    在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。...通过分析和实践这个例子,开发者能更好地理解和掌握ContentProvider的使用,提升应用程序的互操作性和数据管理能力。

    contentprovider异步查询帮助类:AsyncQueryHandler

    在Android开发中,ContentProvider是系统提供的一种数据共享机制,它可以跨应用地访问和操作数据。而`AsyncQueryHandler`是Android系统提供的一个辅助类,用于在ContentProvider中执行异步查询操作,避免阻塞主线程...

    Android 实例分析ContentProvider详解

    ContentProvider是android的四大组件之一,同时与SharedPreferences、IO、SQLite、网络共同构成了五种android存储技术。是android定义的一个管理访问结构化数据机制。android支持的Sqlite是不支持跨进程、跨应用访问...

    android中contentprovider通讯录

    通过分析和学习这些代码,可以加深对Android ContentProvider机制的理解,掌握如何在实际项目中构建和使用ContentProvider。 总之,Android的ContentProvider是实现跨应用数据共享的关键组件。通过创建自定义的...

Global site tag (gtag.js) - Google Analytics