在Android我们能通过建立当前应用的数据库SQLiteDataBase,供本应用对数据的存取。但当多个应用需要共用同一数据时,我们怎么办呢?在Android系统中没有一个公共的内存区域,供多个应用共享存储数据。这里就要用到ContentProvider(内容提供者)。
Android中的ContentProvider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。
ContentProvider 实际上就是提供一个接口方法,多个应用可以通过接口方法访问同一数据库的内容,即用到ContentResolver(内容解析者)来调用方法。
在配置文件中声明ContentProvider并设置权限(authorities),其他应用通过权限获取访问内容提供者的资格。
<provider android:name=".StudentProvider" android:authorities="com.exmple.android_contentProvider.StudentProvider"/>
首先创建一个数据库,可见上一篇博客。
然后实现内容提供者类实现ContentProvider接口,并实现其中的方法
public class StudentProvider extends ContentProvider { private StudentDb dbhelp=null; //声明创建数据库的SQLiteOpenHelper //创建一个路径适配对象,用于匹配访问应用给的访问路径,默认没有匹配 private static final UriMatcher URI_MATCH=new UriMatch(UriMatcher.NO_MATCH); private static final int STUDENT=1; //操作单条数据库记录 private static final int STUDENTS=2; //操作多条数据库记录 //定义匹配规则,#匹配任何数字,*匹配任何文字 static{ URI_MATCH.addURI("com.exmple.android_contentProvider.StudentProvider/#", "student", STUDENT); URI_MATCH.addURI("com.exmple.android_contentProvider.StudentProvider", "student", STUDENTS); } @Override public boolean onCreate() { dbhelp=new StudentDb(getContext()); //获取创建数据库的容器 return false; } //查询数据 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor cursor=null; int flag=URI_MATCH.match(uri); //匹配 SQLiteDatabase database=dbhelp.getWritableDatabase();//获取数据库 switch (flag) { case STUDENT: long id=ContentUris.parseId(uri); //获取记录的id值, String where_value=" id="+id; if(selection!=null&&!"".equals(selection)){ where_value=where_value+" and "+selection; } cursor=database.query("student", null, where_value, selectionArgs, null, null, null); //数据库执行查询语句返回一个游标 break; case STUDENTS: //查询多条记录 cursor=database.query("student", null, selection, selectionArgs, null, null, null, null); default: break; } return cursor; //返回数据库的游标 } //重写getType方法,处理uri头部信息 @Override public String getType(Uri uri) { int flag=URI_MATCH.match(uri); switch (flag) { case STUDENT: return "vnd.android.cursor.item/student "; case STUDENTS: return "vnd.android.cursor.dir/student "; } return null; } //插入数据 @Override public Uri insert(Uri uri, ContentValues values) { Uri resultUri=null; int flag=URI_MATCH.match(uri); switch (flag) { case STUDENTS: SQLiteDatabase database=dbhelp.getWritableDatabase(); long id=database.insert("student",null, values); resultUri=ContentUris.withAppendedId(uri, id); break; default: break; } return resultUri; } //删除数据 @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int count=-1; //影响数据库的行数 int flag=URI_MATCH.match(uri); //匹配路径 SQLiteDatabase database=dbhelp.getWritableDatabase(); switch (flag) { case STUDENT: //通过客户端传过来id long id=ContentUris.parseId(uri); String where_value=" id="+id; if(selection!=null&&!"".equals(selection)){ where_value=where_value+" and "+selection; //获取删除条件 } count=database.delete("student", where_value, selectionArgs); break; case STUDENTS: count=database.delete("student",selection, selectionArgs); break; default: break; } return count; } //更新数据 @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count=-1; int flag=URI_MATCH.match(uri); SQLiteDatabase database=dbhelp.getWritableDatabase(); switch (flag) { case STUDENT: long id=ContentUris.parseId(uri); String where_value=" id="+id; if(selection!=null&&!"".equals(selection)){ where_value=where_value+" and "+selection; } count=database.update("student", values, where_value, selectionArgs); break; default: break; } return count; } }
内容解析者通过调用内容提供者的方法处理数据库,注意路径的规则:content://+权限
public class MyTest extends AndroidTestCase { //向内容提供者数据库中插入数据 public void insert(){ //获取内容解析者 ContentResolver resolver=getContext().getContentResolver(); //content://+权限 Uri url=Uri.parse("content://com.exmple.android_contentProvider.StudentProvider/student"); ContentValues values=new ContentValues(); values.put("name","fangbing"); values.put("address", "hunan"); resolver.insert(url, values); } }
相关推荐
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的重要角色。本教程“mars—第一季android——contentProvider”聚焦于如何利用ContentProvider来实现不同应用程序之间的数据...
在这个项目中,我们将会深入探讨如何使用Android的四大组件——活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及内容提供者(ContentProvider)来创建一个来电拦截器,实现手机黑名单的功能...
在Android应用开发中,"四大组件"是构成应用程序的核心元素,包括Activity(活动)、BroadcastReceiver(广播接收者)、ContentProvider(内容提供者)以及我们关注的Service(服务)。Service是Android系统中的一个...
本文详细介绍了Android四大组件之一——Activity的核心概念及其使用方法。通过创建和配置Activity,开发者可以构建出具有丰富用户界面的应用程序。掌握Activity的启动、关闭以及数据传递机制对于实现流畅的用户体验...
在Android开发中,四大组件是应用程序的核心组成部分,它们分别是Activity(活动)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)以及我们今天重点关注的Service(服务)。Service组件在后台...
在Android操作系统中,Intent是四大核心组件(Activity、Service、BroadcastReceiver、ContentProvider)之间通信的重要桥梁,也是应用程序中启动活动、启动服务、传递数据的关键工具。本篇将深入探讨Intent的基本...
1. **组件**:Android应用由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。Activity是用户界面的入口,负责与用户交互;Service则在后台运行...
3. **组件**:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)是Android四大组件,构成应用的基础。 二、开发环境搭建 1. **Android Studio**:Google官方...
在本项目中,开发者将深入接触到Android的四大组件:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。 二、Java编程语言 Java是Android开发的主要语言,它是...
Android四大组件: Android应用由四大基本组件构成:Activity、Service、BroadcastReceiver和ContentProvider。Activity是用户界面的体现,负责应用的界面显示和用户交互。Service是在后台运行长时间运行的操作,不...
Service是Android四大组件之一,其主要功能是在后台执行长时间运行的操作,而不与用户进行直接交互。这种组件非常适合于执行后台任务,如下载、上传数据、播放音乐、执行定时任务等。Service运行在应用程序进程的...
总结一下,Android的四大组件——Activity、Service、BroadcastReceiver和ContentProvider是构建高效、稳定应用的基础。了解它们的工作原理和相互协作的方式,有助于提升开发效率和应用质量。同时,掌握布局设计和...
首先,Android应用开发的基础在于对Android SDK的理解,包括Android的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)以及Intent机制。源码中会展示这些组件的实现细节,例如Activity的生命周期...
在Android系统中,四大组件——Activity、Service、BroadcastReceiver和ContentProvider,是构建应用程序的核心元素。每个组件都需要在AndroidManifest.xml文件中进行显式注册,以便系统可以发现并管理它们。然而,...
ContentProvider是Android四大组件之一,负责数据的共享和交换。NotePad中的ContentProvider实现了对笔记数据的增删查改接口,其他应用可以通过URI来访问这些数据。这有助于理解Android中数据的跨进程通信。 3. **...
4. **四大组件的应用**:掌握Activity、Service、BroadcastReceiver和ContentProvider的使用场景和编程技巧。 5. **网络编程**:学会使用HTTP请求和响应处理,掌握JSON数据解析方法。 6. **高级编程技术**:如多线程...
ContentProvider用于在不同应用间共享数据,是Android四大组件之一。掌握如何创建和使用ContentProvider,能够实现跨应用的数据交换。 八、碎片(Fragment) Fragment是用于构建可重用的UI模块,尤其在多屏幕适配中...
首先,源码中可能包含了Android四大组件的使用:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。Activity是用户界面的基础,Service用于后台运行任务,...
5. **Service、BroadcastReceiver和ContentProvider**:这三者是Android四大组件的其他三个,分别用于后台服务、广播接收和数据共享。 6. **视图(View)和布局(LayoutManager)**:Android UI主要基于View体系构建,...
Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)。PixelTowers项目中的源码很可能包含了这些组件的实现,我们可以从中学习...