- 浏览: 322246 次
最新评论
-
ax003d:
你好,我使用这种方法,在gridview里显示图片,当图片数量 ...
ScrollView嵌套GridView、ListView的解决办法 -
yunzhu:
Firefox下有Xmarks书签同步插件,很好用,可以方便地 ...
开发人员应该具备的工具----欲善其事,先利其器 -
mjlixm:
Android入门:ContentProvider 学习了! ...
Android入门:ContentProvider -
bluesky329:
很好收益匪浅!
一个软件工程师的经验之谈 -
qinglongyun:
每天工作4小时的程序员
一、监听ContentProvider主要步骤
1.在ContentProvider类的insert\update\delete方法加入this.getContext().getContentResolver().notifyChange(URI,null);
其中URI表示监听的URI
null表示发送消息给任何人;
2.在访问者的类中调用如下方法:
context.getContentResolver().registerContentObserver(uri,true,ContentObserver observer);
即可;
二、实例
我们在Test1和Test2应用都对ContentProvider的数据改变进行注册,如果ContentProvider发出通知,则Test1和Test2都会收到通知;
注意:此处有一个很重要的问题,如果Test1和Test2应用的MainActivity为同一个包,则如果先运行Test2,再运行Test1,则Test2会停止运行,因为Test1应用会覆盖Test2的应用,即接收不到通知;
因此我们要把Test1应用和Test2应用的包名设为不同,此处为org.xiazdong和org.xzdong;
ContentProvider.java
Java代码
- package org.xiazdong.db;
- import android.content.ContentProvider;
- import android.content.ContentUris;
- import android.content.ContentValues;
- import android.content.UriMatcher;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.net.Uri;
- public class PersonProvider extends ContentProvider{
- private DatabaseHelper helper;
- private SQLiteDatabase db;
- private UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
- @Override
- public boolean onCreate() {
- helper = new DatabaseHelper(this.getContext());
- matcher.addURI("org.xiazdong.provides.personprovider", "person", 1);
- return true;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- return null;
- }
- /*
- * 如果操作集合,则必须以vnd.android.cursor.dir开头
- * 如果操作非集合,则必须以vnd.android.cursor.item开头
- * */
- @Override
- public String getType(Uri uri) {
- return "";
- }
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- db = helper.getWritableDatabase();
- switch(matcher.match(uri)){
- case 1:
- long rowid = db.insert("person", null, values);
- this.getContext().getContentResolver().notifyChange(uri, null);//如果改变数据,则通知所有人
- return ContentUris.withAppendedId(uri, rowid); //返回插入的记录所代表的URI
- default:
- throw new IllegalArgumentException("wrong uri");
- }
- }
- @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;
- }
- }
Test1应用
Java代码
- package org.xiazdong;
- import android.app.Activity;
- import android.content.ContentResolver;
- import android.content.ContentValues;
- import android.database.ContentObserver;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity {
- private Button button;
- private OnClickListener listener = new OnClickListener(){
- @Override
- public void onClick(View v) {
- ContentResolver resolver = MainActivity.this.getContentResolver();
- Uri uri = Uri.parse("content://org.xiazdong.provider2/person");
- resolver.registerContentObserver(uri, true, new PersonObserver(new Handler()));
- ContentValues values = new ContentValues();
- values.put("name", "zzz");
- values.put("age", 1);
- resolver.insert(uri, values); //向ContentProvider插入数据
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button = (Button)this.findViewById(R.id.button);
- button.setOnClickListener(listener);
- }
- private class PersonObserver extends ContentObserver{//监听
- public PersonObserver(Handler handler) {
- super(handler);
- }
- //当ContentProvier数据发生改变,则触发该函数
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- Log.i("Test1", "数据改变");
- }
- }
- }
Test2应用
Java代码
- package org.xzdong;
- import android.app.Activity;
- import android.database.ContentObserver;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- public class MainActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Uri uri = Uri.parse("content://org.xiazdong.provider2/person");
- this.getContentResolver().registerContentObserver(uri, true, new PersonObserver(new Handler()));
- }
- private class PersonObserver extends ContentObserver{
- public PersonObserver(Handler handler) {
- super(handler);
- }
- //当ContentProvier数据发生改变,则触发该函数
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- Log.v("Test2", "数据改变");
- }
- }
- }
效果:
发表评论
-
Android入门:ContentProvider
2012-07-02 00:06 1890一、ContentProvider介绍 Cont ... -
android 使用广播接收者监听短信和拦截外拨电话
2012-06-27 23:31 2186如果你想监听自己或者别人接收到的短信,设置黑名单等功能, ... -
android 广播接收者--BroadcastReceiver
2012-06-27 23:30 3513BroadcastReceiver初识: ... -
一个项目只使用一个Activity初探
2012-06-27 23:29 938提供一个简单案例: 1,新建一个项目 修改和添加 ... -
android 之访问WebService显示手机号码归属地
2012-06-27 23:27 1432发送XML 通过URL封装路径打开一个HttpURLC ... -
Android开发从入门到精通(8) _9
2012-04-24 21:45 2427Spinner 第八章(9) 在本节中将为Spinne ... -
Android开发从入门到精通(8) _8
2012-04-24 21:44 940RadioGroup 第八章(8) 在本章中将为Rad ... -
Android开发从入门到精通(8) _7
2012-04-24 21:43 915EditText 第八章(7) 在本节中,和上一节很类 ... -
Android开发从入门到精通(8) _6
2012-04-24 21:43 841CheckBox 第八章(6) 在本节中,将为Chec ... -
Android开发从入门到精通(8) _5
2012-04-24 21:42 871按钮 第八章(5) 看看下面的代码。这段代码代表了四个 ... -
Android开发从入门到精通(8) _4
2012-04-23 22:18 1007为AutoComplete创建一个 ... -
Android开发从入门到精通(8) _3
2012-04-23 22:17 1128使用菜单 第八章(3) 在本节中,你将建造一个应用 ... -
Android开发从入门到精通(8) _2
2012-04-23 22:17 1012修改AndroidManifest.xml文件 第八章( ... -
Android开发从入门到精通(8) _1
2012-04-23 22:16 835列表,菜单和其它Views 第八章(1) 关键技能 & ... -
Android开发从入门到精通(7) _8
2012-04-23 22:16 1065试试这个:修改AndoridPhoneDialer项目 ... -
Android开发从入门到精通(7) _7
2012-04-22 15:14 934执行一个EditText View 第七章(7) ... -
Android开发从入门到精通(7) _6
2012-04-22 15:13 1121修改AndroidPhoneDialer 第七章(6) ... -
Android开发从入门到精通(7) _5
2012-04-22 15:13 899编辑活动许可 第七章(5) 大多数的Activit ... -
Android开发从入门到精通(7) _4
2012-04-22 15:12 978在本节中你将会 ... -
Android开发从入门到精通
2012-04-21 12:46 873从你的活动中打出电话 第七章(4) 在本节中你将会 ...
相关推荐
免费下载:android ContentProvider详细解析 讲得好详细
Android 程序技术 本节课程内容:ContentProvider Uri(通用资源标识符 Universal Resource ...Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider。 ContentProvider类并不会直接与外部进程
疯狂android资料:第九章使用ContentProvider实现数据共享.doc
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
contentProvider监听的例子
本篇文章小编为大家介绍,基于Android 监听ContentProvider 中数据变化的相关介绍。需要的朋友参考下
此demo利用ContentProvider实现android app间的数据共享
Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...
这是学习ContentProvider的第二个练习。 里面自定义ContentProvider类来与SQLite交互。 大致类容就是:通过ContentProvider,创建自己的.db,操作自己的.db. 代码里有详细的解释
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作,可以直接操作数据库,也可以使用ContentProvider来对数据库进行间接操作。
android 数据库 以及自定义ContentProvider demo
现在请数一数你的手机中一共有多少...这个时候Contentprovider就排上用场了,Contentprovider能够在各个app之间进行数据的共享和传递,让信息不再成为孤岛,从这个意义上讲,你还能有不去学习Contentprovider的理由吗?
ContentProvider数据共享的基本使用方法
android对sqlite、contentprovider的例子
android 内容提供者 ContentProvider
Android ContentProvider简单实现
Android第八章ContentProvider