- 浏览: 336726 次
最新评论
-
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 1981一、ContentProvider介绍 Cont ... -
android 使用广播接收者监听短信和拦截外拨电话
2012-06-27 23:31 2219如果你想监听自己或者别人接收到的短信,设置黑名单等功能, ... -
android 广播接收者--BroadcastReceiver
2012-06-27 23:30 3575BroadcastReceiver初识: ... -
一个项目只使用一个Activity初探
2012-06-27 23:29 998提供一个简单案例: 1,新建一个项目 修改和添加 ... -
android 之访问WebService显示手机号码归属地
2012-06-27 23:27 1500发送XML 通过URL封装路径打开一个HttpURLC ... -
Android开发从入门到精通(8) _9
2012-04-24 21:45 2480Spinner 第八章(9) 在本节中将为Spinne ... -
Android开发从入门到精通(8) _8
2012-04-24 21:44 998RadioGroup 第八章(8) 在本章中将为Rad ... -
Android开发从入门到精通(8) _7
2012-04-24 21:43 990EditText 第八章(7) 在本节中,和上一节很类 ... -
Android开发从入门到精通(8) _6
2012-04-24 21:43 873CheckBox 第八章(6) 在本节中,将为Chec ... -
Android开发从入门到精通(8) _5
2012-04-24 21:42 907按钮 第八章(5) 看看下面的代码。这段代码代表了四个 ... -
Android开发从入门到精通(8) _4
2012-04-23 22:18 1088为AutoComplete创建一个 ... -
Android开发从入门到精通(8) _3
2012-04-23 22:17 1215使用菜单 第八章(3) 在本节中,你将建造一个应用 ... -
Android开发从入门到精通(8) _2
2012-04-23 22:17 1125修改AndroidManifest.xml文件 第八章( ... -
Android开发从入门到精通(8) _1
2012-04-23 22:16 919列表,菜单和其它Views 第八章(1) 关键技能 & ... -
Android开发从入门到精通(7) _8
2012-04-23 22:16 1117试试这个:修改AndoridPhoneDialer项目 ... -
Android开发从入门到精通(7) _7
2012-04-22 15:14 1023执行一个EditText View 第七章(7) ... -
Android开发从入门到精通(7) _6
2012-04-22 15:13 1156修改AndroidPhoneDialer 第七章(6) ... -
Android开发从入门到精通(7) _5
2012-04-22 15:13 932编辑活动许可 第七章(5) 大多数的Activit ... -
Android开发从入门到精通(7) _4
2012-04-22 15:12 1026在本节中你将会 ... -
Android开发从入门到精通
2012-04-21 12:46 909从你的活动中打出电话 第七章(4) 在本节中你将会 ...
相关推荐
5. **ContentProvider**:共享和访问数据的接口,允许不同应用之间交换数据。 AndroidManifest.xml文件是每个应用的重要组成部分,它包含了应用的元数据,如所需的权限、使用的库、声明的活动和服务等。例如,清单1...
《Android入门到精通》这本书是为想要学习和掌握Android应用开发的初学者量身打造的指南。Android作为全球最流行的移动操作系统,拥有庞大的用户群体,为开发者提供了广阔的应用市场和无限的创新空间。本书旨在帮助...
《Android从入门到精通》是一套全面而深入的Android学习教程,主要针对想要掌握Android开发技术的初学者和进阶者。本教程通过PPT的形式,以清晰的逻辑和丰富的实例,逐步引领学习者步入Android的世界。以下是本教程...
4. ContentProvider:ContentProvider是数据存储和共享的桥梁,允许应用之间共享数据,如联系人、日历等。 四、Intent和激活组件 Intent是Android中连接组件的桥梁,它用来启动Activity或Service,或者在组件间传递...
Android提供了多种数据存储方式,包括SharedPreferences用于轻量级数据存储,SQLite数据库用于结构化数据,以及文件存储和ContentProvider等。理解何时选择合适的存储方式,以及如何进行数据操作,是提升应用功能性...
Android入门到精通详解 在移动应用开发领域,Android是最受欢迎的操作系统之一,为开发者提供了丰富的功能和广阔的创新空间。本文将全面介绍从Android基础到高级技术的各个环节,帮助你从入门到精通,成为一名合格...
Android入门中文文档是一份专为初学者设计的指南,旨在帮助新接触Android开发的朋友们快速理解和掌握这个全球最大的智能手机操作系统的基础知识。这份文档通常包含了从安装开发环境到编写第一个应用程序的所有步骤,...
在进入Android开发的世界之前,首先理解“Android入门到精通”这一主题是非常重要的。这是一套专为初学者设计的学习资源,旨在帮助你从零基础逐渐掌握Android应用开发的方方面面。以下是一些关键知识点的详细说明: ...
6. **数据存储**:Android支持多种数据存储方式,如SQLite数据库、SharedPreferences用于轻量级数据、文件系统存储、ContentProvider等,根据数据需求和复杂度选择合适的方式。 7. **网络通信**:Android应用可以...
你可能需要学习如何读写本地文件、使用SQLite数据库存储数据,或者调用Android的ContentProvider访问外部存储。 通知和服务(Service)也是Android开发的重要部分。案例可能包含创建通知和后台运行的服务,让你理解...
- **ContentProvider**:共享应用数据的标准化接口,跨应用数据交换。 8. **通知与消息推送** - **Notification**:向用户展示重要信息或提醒。 - **Firebase Cloud Messaging (FCM)**:Google提供的消息推送...
《Android开发从入门到精通》是一本专门为Android编程新手量身打造的教程。这本书全面覆盖了Android开发的基础知识,旨在帮助读者快速掌握Android应用开发的核心技能。以下是对书中的主要知识点进行的详细解读: 1....
在Android开发领域,"android入门、增删改查"是一个非常基础且重要的主题,它涵盖了Android应用程序开发的基本操作,特别是涉及到数据管理的核心部分。在这个主题中,开发者将学习如何创建用户界面,处理用户输入,...
根据提供的文件信息,我们可以推断出这是一本关于Android开发的书籍——《Android开发从入门到精通》,作者为扶松柏。尽管具体内容链接无法直接访问,但基于标题、描述及部分可见信息,我们可以总结出一些重要的知识...
4. **数据存储**:Android提供了多种数据存储方式,包括SQLite数据库、SharedPreferences、内部/外部存储、ContentProvider等,适用于不同场景的数据保存需求。 5. **网络编程**:Android应用可以通过...
《Google Android开发入门与实战》是一本专门为初学者和开发者准备的指南,旨在帮助读者快速掌握Android应用开发的基础知识,并通过实战项目加深理解。这本书涵盖了从Android开发环境的搭建到实际应用开发的全过程,...
"Android开发入门60个小案例+源代码.rar.rar" 提供了一套全面的学习资源,旨在帮助初学者快速熟悉Android应用开发的基本流程和技术要点。以下是对这些小案例及其源代码的详细解析。 1. **环境配置**:首先,学习...
"Android应用开发详解d88 android入门"是一个适合新手的引导性资源,它旨在帮助初学者建立起对Android开发的基本理解。以下是对该主题的详细阐述: 一、Android应用架构 Android应用基于Java或Kotlin语言编写,其...