Content Provider 属于Android应用程序的组件之一,作为应用程序之间唯一的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的借口。
Android 系统为一些常见的数据类型(如音乐、视频、图像、手机通信录联系人信息等)内置了一系列的 Content Provider, 这些都位于android.provider包下。持有特定的许可,可以在自己开发的应用程序中访问这些Content Provider。
让自己的数据和其他应用程序共享有两种方式:创建自己的Content Provier(即继承自ContentProvider的子类) 或者是将自己的数据添加到已有的Content Provider中去,后者需要保证现有的Content Provider和自己的数据类型相同且具有该 Content Provider的写入权限。对于Content Provider,最重要的就是数据模型(data model) 和 URI。
1.数据模型
Content Provider 将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个 "_ID" 数值字段,改字段唯一标识一条数据。
2.URI
URI,每一个Content Provider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个Content Provider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以"content://" 开头,其中"content:"是用来标识数据是由Content Provider管理的 schema。
在几乎所有的Content Provider 的操作中都会用到URI,因此一般来讲,如果是自己开发的Content Provider,最好将URI定义为常量,这样在简化开发的同时也提高了代码的可维护性。
首先来介绍如何访问Content Provider中的数据,访问 Content Provider中的数据主要通过ContentResolver对象,ContentResolver类提供了成员方法可以用来对Content Provider 中的数据进行查询、插入、修改和删除等操作。 以查询为例,查询一个 Content Provider 需要掌握如下的信息。
唯一标识Content Provider 的URI
需要访问的数据字段名称。
该数据字段的数据类型
提示: 如果需要访问特定的某条数据记录,只需该记录的ID 即可。
查询Content Provider的方法有两个:ContentResolver的query() 和 Activity 对象的 managedQuery(),二者接收的参数均相同,返回的都是Cursor 对象,唯一不同的是 使用managedQuery 方法可以让Activity 来管理 Cursor 的生命周期。
被管理的Cursor 会在 Activity进入暂停状态的时候调用自己的 deactivate 方法自行卸载,而在Activity回到运行状态时会调用自己的requery 方法重新查询生成的Cursor对象。如果一个未被管理的Cursor对象想被Activity管理,可以调用Activity的 startManagingCursor方法来实现。
下面通过一个例子来说明访问Content Provider的方式,本例中通过Content Resolver对象访问Android中存储了联系人信息的Content Provider并将数据显示到TextView上。
大家先来看一下我手机上都有哪些联系人吧,见下图。
下边我们就来看代码吧比较简单了,只有一个类Activity01
package xiaohang.zhimeng;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;
public class Activity01 extends Activity {
//查询Content Provider时希望返回的列
String [] columns = {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID,
//People._ID,
//People.NAME
};
Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
TextView tv;
//Uri contaUri = Contacts.People.CONTENT_URI;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
String result = getQueryData();
tv.setTextColor(Color.GREEN);
tv.setTextSize(20.0f);
tv.setText("ID\t名字\n" + result);
}
//获取联系人列表的信息,返回 String对象
public String getQueryData(){
String result = "";
//获取ContentResolver对象
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(contactUri, columns, null, null, null);
//获得_ID字段的索引
int idIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
//获得Name字段的索引
int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
//遍历Cursor提取数据
for (cursor.moveToFirst();(!cursor.isAfterLast());cursor.moveToNext()) {
result = result + cursor.getString(idIndex) + "\t";
result = result + cursor.getString(nameIndex)+ "\t\n";
}
cursor.close();
return result;
}
}
下面是运行后的效果
最后在提醒大家一下不要忘记加权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
测试平台 android2.0 源码见附件
- 大小: 31.4 KB
- 大小: 17.1 KB
分享到:
相关推荐
android-simple-content-provider-app 简单的Android Content Provider使用示例
Android Content Provider Demo
博文《android基础知识05:四大组件之content provider》的示例程序,实现了content provider 的基本功能。
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
android content provider两个程序共享数据实例demo。简单的两个应用app之间共享数据。 getContentResolver().insert() getContentResolver().query() getContentResolver().delete() getContentResolver().update()
主要为大家详细解析了Android组件content provider的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
content provider实现数据共享demo(内有两个项目)
Android:Content Provider的使用。 1、Content Provider 简介 2、使用现成的Content Provider 3、定义自己的Content Provider 一、Content Provider 简介 我们说Android应用程序的四个核心组件是:Activity、...
1、什么是内容提供者 2、怎样创建内容提供者 3、通过内容提供者完成CRUD操作 4、访问内容提供者 5、监听内容提供者数据变化 6、两个案例:监听短信以及操作联系人 最最重要的是包含了源码
Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解!
NULL 博文链接:https://dampce032.iteye.com/blog/975663
NULL 博文链接:https://ouyangfeng521.iteye.com/blog/1059449
关于Content Providers Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个...把18.SQLite和22.22.Content Provider添加到项目中,先运行18.SQLite,然后在进行22.Content Provider测试
NULL 博文链接:https://byandby.iteye.com/blog/837466
本篇文章小编为大家介绍,Android Content Provider的使用。需要的朋友参考下
Content provider generator for android that uses annotation processing. All helper classes are generated based on a Java Object. Documentation is WIP. A sample app is provided. Download Gradle: ...
两个java库,Unity发布安卓项目经常会有需要。 发包时遇到报错: Didn't find class "androidx.core.content.FileProvider" on path... ...<provider android:name="androidx.core.content.FileProvider
这是使用Content Provider案例源码,详细讲解请移步http://blog.csdn.net/wei_zhi/article/details/52960073