考虑到这一点,MediaStore 内容提供器,这个用来分发图像,音频和视频数据的主内容提供器,利用了一个特殊的约定:用来获取关于这个二进制数据的元信息的query()或managedQuery()方法使用的URI,同样可以被openInputStream()方法用来数据本身。类似的,用来把元信息放进一个MediaStore记录里的insert()方法使用的URI,同样可以被openOutputStream()方法用来在那里存放二进制数据。下面的代码片断说明了这个约定:
java代码:
- import android.provider.MediaStore.Images.Media;
- import android.content.ContentValues;
- import java.io.OutputStream;
- // Save the name and description of an image in a ContentValues map.
- ContentValues values = new ContentValues(3);
- values.put(Media.DISPLAY_NAME, "road_trip_1");
- values.put(Media.DESCRIPTION, "Day 1, trip to Los Angeles");
- values.put(Media.MIME_TYPE, "image/jpeg");
- // Add a new record without the bitmap, but with the values just set.
- // insert() returns the URI of the new record.
- Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
- // Now get a handle to the file for that record, and save the data into it.
- // Here, sourceBitmap is a Bitmap object representing the file to save to the database.
- try {
- OutputStream outStream = getContentResolver().openOutputStream(uri);
- sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);
- outStream.close();
- } catch (Exception e) {
- Log.e(TAG, "exception while writing image", e);
- }
复制代码
批量更新记录Batch updating records
要批量更新一组记录(例如,把所有字段中的"NY"改为"New York"),可以传以需要改变的列和值参数来调用ContentResolver.update()方法。
删除一个记录Deleting a record
要删除单个记录,可以传以一个特定行的URI参数来调用ContentResolver.delete()方法。
要删除多行记录,可以传以需要被删除的记录类型的URI参数来调用ContentResolver.delete()方法(例如,android.provider.Contacts.People.CONTENT_URI)以及一个SQL WHERE 语句来定义哪些行要被删除。
创建一个内容提供器Creating a Content Provider
要创建一个内容提供器,你必须:
建立一个保存数据的系统。大多数内容提供器使用Android的文件储存方法或SQLite数据库来存放它们的数据,但是你可以用任何你想要的方式来存放数据。Android提供SQLiteOpenHelper类来帮助你创建一个数据库以及SQLiteDatabase类来管理它。
扩展ContentProvider类来提供数据访问接口。
在清单manifest文件中为你的应用程序声明这个内容提供器(AndroidManifest.xml)。
扩展ContentProvider类Extending the ContentProvider class
你可以定义一个ContentProvider子类来暴露你的数据给其它使用符合ContentResolver和游标Cursor对象约定的应用程序。理论上,这意味需要实现6个ContentProvider类的抽象方法:
query()
insert()
update()
delete()
getType()
onCreate()
query()方法必须返回一个游标Cursor对象可以用来遍历请求数据,游标本身是一个接口,但Android提供了一些现成的Cursor对象给你使用。例如,SQLiteCursor可以用来遍历SQLite数据库。你可以通过调用任意的SQLiteDatabase类的query()方法得到它。还有一些其它的游标实现-比如MatrixCursor-用来访问没有存放在数据库中的数据。
因为这些内容提供器的方法可以从不同的进程和线程的各个ContentResolver对象中调用,所以它们必须以线程安全的方式来实现。
周到起见,当数据被修改时,你可能还需要调用ContentResolver.notifyChange()方法来通知侦听者。
除了定义子类以外,你应该还需要采取其它一些步骤来简化客户端的工作和让这个类更容易被访问:
定义一个public static final Uri 命名为CONTENT_URI。这是你的内容提供器处理的整个content: URI的字符串。你必须为它定义一个唯一的字符串。最佳方案是使用这个内容提供器的全称(fully qualified)类名(小写)。因此,例如,一个TransportationProvider类可以定义如下:
java代码:
- public static final Uri CONTENT_URI = Uri.parse("content://com.example.codelab.transporationprovider");
复制代码
分享到:
相关推荐
Android中的ContentProviders是Android平台用来提供不同类型数据(比如音频、视频、图片、个人联系人等)的一个统一接口。ContentProviders使用URI(统一资源标识符)来识别数据集,并允许一个应用程序存储和检索...
Content Provider是Android提供的一种机制,使得应用程序能够将自己的数据公开给其他应用访问。通过Content Provider,开发者可以创建一个标准化的数据接口,其他应用可以通过这个接口读取或修改数据,实现了数据的...
在Android系统中,Content Providers是数据共享的关键机制,它允许应用程序之间进行数据交换,打破了应用间的数据孤岛。本文将深入探讨Content Providers的功能,并通过实例演示如何使用它们。 Content Providers...
在Android应用开发中,Content Providers扮演着至关重要的角色。它们是Android系统中数据共享和交换的核心组件,使得不同应用程序之间可以安全地访问和操作数据。本资料主要关注Android应用源码中的Content ...
Content Providers能够让你的应用程序的数据对其他应用程序可见,甚至可以被系统或第三方应用读取和修改。在这个"Android应用源码之29.Content_Providers(1)"的压缩包中,我们可以深入学习Content Providers的实现和...
easy-content-providers, 在与定制内容提供商的数据中,轻松集成 Android 内容提供程序轻松集成内置的android和自定义内容提供程序数据。 它甚至还附带了一个示例应用程序和用于调试目的的Stetho扩展。 为什么以及...
Content Providers是Android系统提供的一种机制,用于在应用程序之间共享数据。它们可以处理不同类型的数据,如联系人、日历事件,甚至是存储在SQLite数据库中的自定义数据。通过Content Providers,开发者可以创建...
本博文学习一下Content Providers(内容提供器) 目录 Android运行时 (Android runtime)权限 在程序运行时申请权限 内容提供器简介 访问其他程序中的数据 Android运行时 (Android runtime)权限 Android开发...
Content Providers Demo 下载,对应博文: 【Android 开发】:Content Provider (内容提供者) 详解 :http://blog.csdn.net/ahuier/article/details/11882059 读者可以结合博文阅读,然后下载源代码进行学习。
关于Content Providers Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。 它是应用程序间共享数据的唯一方法。 在Android中没有一块公共的所有应用程序都...
"Android-实用程序来创建ContentProviders没有样板和重型定制选项"项目旨在解决这一问题,提供了一种简化ContentProvider创建的方法。这个项目可能包含一个库或者框架,它通过自动化的代码生成或抽象化处理,减少了...
Content Providers是Android系统中用于存储和检索数据的核心组件,它可以为其他应用程序提供统一的数据接口。通过Content Provider,不同应用间可以安全地共享数据,即使这些数据存储在私有数据库、文件系统或其他...
Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。它是应用程序间共享数据的唯一方法。在Android中没有一块公共的所有应用程序都能访问的数据存储地方
在Android开发中,Content Providers是四大组件之一,它是应用程序间数据共享的主要机制。Content Providers能够使得一个应用的数据对其他应用可见,甚至可以被系统服务和外部应用进行读写操作。本压缩包“应用源码...
android coolszy 29.Content_Providers(1).rar )29.Content_Providers(1).rar )29.Content_Providers(1).rar )
- **Content Resolver**:Content Resolver 是 Android 系统提供的用于与 Content Provider 进行通信的客户端组件。应用程序通过 Content Resolver 对 Content Provider 进行数据操作。 - **Cursor**:在 Android 中...
30.Content_Providers(2).rar 30.Content_Providers(2).rar 30.Content_Providers(2).rar android coolszy