Android是如何实现应用程序之间数据共享的?一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的数据
是如何存储的,或者是使用数据库还是使用文件,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交
道,例如:添加(insert)、删除(delete)、查询(query)、修改(update),当然需要一定的权限才可以。
如何将应用程序的数据暴露出去? Android提供了ContentProvider,一个程序可以通过实现一个Content
provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Content
providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种
方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content
provider中,前提是有相同数据类型并且有写入Content provider的权限。
如何通过一套标准及统一的接口获取其他应用程序暴露的数据?Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。
当前篇主要说明,如何获取其它应用程序共享的数据,比如获取Android 手机电话薄中的信息。
什么是URI?
在学习如何获取ContentResolver前,有个名词是必须了解的:URI。URI是网络资源的定义,在Android中赋予其更广阔的含义,先看个例子,如下:
将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider” authorities=”com.example.transportationprovider” . . . >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI
ContentResolver 介绍说明
看完这些介绍,大家一定就明白了,ContentResolver是通过URI来查询ContentProvider中提供的数据。除了URI以
外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型。如果你需要获取一个特定的记录,你就必须知道当前记录的ID,也就是URI中D部分。
前面也提到了Content providers是以类似数据库中表的方式将数据暴露出去,那么ContentResolver也将采用类似数据库的操作来从Content providers中获取数据。现在简要介绍ContentResolver的主要接口,如下:
返回值 |
函数声明 |
final Uri |
insert
(Uri url, ContentValues values)Inserts a row into a table at the given URL. |
final int |
delete
(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI. |
final Cursor |
query
(Uri
uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder)Query the given URI, returning a Cursor over the
result set. |
final int |
update
(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI. |
看到这里,是否感觉与数据库的操作基本一样的?就是这样的,详细解析请参考Android SQLite解析
篇中的说明,不在此详细说明。
最后一个问题:如何获取ContentResolver?调用getContentResolver (),例如:ContentResolver cr = getContentResolver();
制作ContentResolver实例
以上就完全介绍了如何获取、使用ContentResolver,启动Eclipes,制作一个完整的实例如下:
打开showcontent.java,修改如下:
package
moandroid.showcontact;
import
android.app.ListActivity;
import
android.database.Cursor;
import
android.os.Bundle;
import
android.provider.Contacts.Phones;
import
android.widget.ListAdapter;
import
android.widget.SimpleCursorAdapter;
public
class
showcontact extends
ListActivity {
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
Cursor c = getContentResolver().query(Phones.CONTENT_URI
, null
, null
, null
, null
);
startManagingCursor(c);
ListAdapter adapter = new
SimpleCursorAdapter(this
,
android.R.layout.simple_list_item_2
, c,
new
String[] { Phones.NAME
, Phones.NUMBER
},
new
int
[] { android.R.id.text1
, android.R.id.text2
});
setListAdapter(adapter);
}
}
然后在AndroidManifest.XML中<application>元素前增加如下许可:
<uses-permission android:name=”android.permission.READ_CONTACTS” />
最后运行程序,在模拟器启动后,单击Menu返回到Home界面,打开Contacts选择Contacts标签页,添加2个联系人信息。返回到Home,选择moandroid.showcontact运行,刚添加的2个联系人信息将显示在界面上,如下:
总结说明
ContentResolver的使用极大的方便了应用程序之间共享数据,如何将应用程序的数据完全暴露给给他应用程序使用了,将在下篇文章Android 应用程序之间数据共享—-ContentProvider中说明。
http://www.moandroid.com/?p=122
分享到:
相关推荐
Android 应用程序之间数据共享 ContentResolver Android 应用程序之间数据共享是一种非常重要的机制,它允许不同的应用程序之间共享数据,并且提供了一个标准的接口来访问和操作这些共享数据。ContentResolver 是 ...
假设我们有一个名为showcontact的Android应用程序,它使用ContentResolver来访问通讯录,然后将查询结果展示在一个列表视图中。该应用中的关键代码片段如下: ```java public class showcontact extends ...
在Android系统中,应用程序之间进行数据共享是一种常见的需求。为了实现这一目标,Android提供了一种安全、标准化的方式,即通过ContentProvider和ContentResolver组件。本文将深入探讨这两个组件的工作原理及其在...
综上所述,Android应用程序之间的通信涉及到Intent的使用、BroadcastReceiver的监听、ContentProvider的数据共享以及Activity的交互。理解并熟练掌握这些概念对于开发健壮且功能丰富的Android应用至关重要。在实际...
在Android系统中,ContentProvider是实现应用程序间数据共享的核心组件。它允许一个应用将自己的数据集公开,让其他应用可以通过标准的ContentResolver接口进行访问。这种机制使得数据可以在多个应用之间透明地共享...
在Android中,实现不同应用间的数据共享主要有以下几种方法: 1. **ContentProvider**:Android系统的组件之一,可以暴露特定的数据集供其他应用访问。创建一个ContentProvider专门处理SharedPreferences文件,其他...
总的来说,ContentResolver和ContentProvider是Android数据共享的关键机制,它们使得数据能在不同的应用程序之间安全、有效地流通,极大地扩展了Android应用的可扩展性和互操作性。理解并熟练掌握这两者的使用,对于...
在Android系统中,数据共享是应用程序之间相互交互的重要方式之一,尤其在需要多个应用协同工作时。本主题聚焦于在Android 2.3(API级别9)及以下版本中,如何利用SharedPreferences进行跨应用的数据共享。...
在Android系统中,数据共享是应用之间相互交互的重要方式,ContentProvider则是官方推荐的实现这一功能的核心组件。ContentProvider提供了一种标准化的机制,使得不同的应用程序可以安全、有序地访问和共享数据,...
在Android系统中,Content Provider是四大应用程序组件之一,它的主要职责是实现应用程序间的数据共享。Content Provider基于URI机制,使得不同应用能够访问和修改存储在Content Provider中的数据。当数据发生更新时...
在Android系统中,ContentResolver是一个至关重要的组件,它充当了应用程序与ContentProvider之间的桥梁,使得应用能够方便地读取、写入、更新和删除由ContentProvider管理的数据。ContentResolver提供了标准化的API...
ContentProvider是Android中数据共享的桥梁,允许应用之间交换数据。它提供了一种标准的方式来访问存储在应用内的私有数据(如数据库),或者其他应用提供的公开数据。ContentProvider通过Uri(统一资源标识符)来...
在Android系统中,不同应用程序之间的数据共享和存储是一项重要的任务,尤其在开发多模块或协作应用时。Android提供了多种机制来实现这一目标,包括服务(Services)、内容提供者(Provider)以及共享用户ID...
在Android应用开发中,数据共享是一个常见的需求,无论是同一个应用的不同组件之间,还是不同应用之间,都需要有效地交换和访问数据。ContentProvider是Android系统提供的一种机制,它为应用程序提供了安全的数据...
在Android 4.0上,SharePreferences可以用来实现跨应用程序的数据共享,这在某些场景下非常实用,比如用户设置的偏好信息需要在多个应用之间共享。 **一、SharedPreferences基本概念** SharedPreferences是一个...
1. **Android SDK**:所有的Android应用程序都是基于Android Software Development Kit (SDK) 开发的。SDK提供了开发环境、工具和API,使得开发者可以构建原生的Android应用。 2. **布局设计**:在contactsMod和...
Android开发基础,讲述了Android开发环境的搭建、Android常用工具的使用和第一个Android应用程序的开发 第二篇 技术篇 第3章 Android中的资源访问 Android 中的资源访问,讲述了如何定义和访问Android中的外部...
在Android开发中,ContentProvider和ContentResolver是两个关键组件,它们构成了Android系统中不同应用程序间数据共享的基础。本文将深入探讨如何自定义ContentProvider和如何有效地使用ContentResolver进行数据操作...
在Android平台上,应用程序之间的通信(Application-to-Application Communication,简称A2AC)是开发者经常会遇到的一个重要主题。这个主题涉及到如何让不同的应用之间共享数据、启动服务、发送广播以及使用内容...