首页 > 代码库 > Android Content Provider简介

Android Content Provider简介

  Content Provider是Android的四大组件之一,与Activity和Service相同,使用之前需要注册;

  Android系统中存在大量的应用,当不同的应用程序之间需要共享数据时,可以使用Content Provider来实现,因为它为存储和读取数据提供了统一的接口;

 

(1)Android系统内置的许多数据都是使用Content Provider,然后供开发者调用,如音频,视频,图片,通讯录等;

(2)当一个程序需要把自己的数据暴露给其他程序使用时,该程序就可以通过提供Content Provider来实现,而其他程序就可以通过ContentResolver来操作Content Provider暴露的数据;

(3)应用程序通过ContentProvider开放了自己的数据,该应用程序不需要启动,其他应用程序都可以操作开放的数据,包括增删改查操作;

(4)当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

 

ContentProvider类的使用步骤

1、自定义MyProvider extends ContentProvider子类,在该类中重写用于增删改查的操作;

2、在AndroidManifest.xml中注册该类;

3、设定共享数据的uri地址;

4、在其它类或其他项目中调用ContentResolver对象中的增删改查方法,按uri提供的地址对数据进行操作;

 

例如:获取系统的手机的通讯录;

 

 

代码其实很简单,因为我们没有自定义我们的Content Provider类,所以只使用ContentResolver来操作数据就行了;

package com.xiaozhang.contentprovidertest;import android.app.Activity;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.database.Cursor;import android.graphics.Color;import android.widget.TextView;import android.content.ContentResolver;public class MainActivity extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView textView = new TextView(this);        String string = getQueryData();        textView.setTextColor(Color.GRAY);        textView.setText(string);        textView.setTextSize(20.0f);        setContentView(textView);    }    public String getQueryData() {        String string = "";        int id = 1;        // 得到ContentResolver对象        ContentResolver cr = getContentResolver();        // 获取电话本中开始的游标        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,                null, null, null);        // 向下移动        while (cursor.moveToNext()) {            // 取得联系人名字            int nameFieldColumnIndex = cursor                    .getColumnIndex(PhoneLookup.DISPLAY_NAME);            String contact = cursor.getString(nameFieldColumnIndex);            // 取得电话号码            String ContactId = cursor.getString(cursor                    .getColumnIndex(ContactsContract.Contacts._ID));            Cursor phone = cr.query(                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="                            + ContactId, null, null);            while (phone.moveToNext()) {                String PhoneNumber = phone                        .getString(phone                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                string += (id + "-----" + contact + "-----" + PhoneNumber + "\n");                id++;            }        }        cursor.close();        return string;    }}

然后在AndroidManifest.xml中添加权限;

<uses-permission android:name="android.permission.READ_CONTACTS" />

 

Android Content Provider简介