Content Provider是内容提供器,与内容(数据)的存取(存储、获取)有关,是Android应用程序的四大组成部分之一,是Android中的跨应用访问数据机制。
数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问,这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据,则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接来使用数据库。
一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据。
package com.example.readcontact; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //query是查询,结果会有很多行,query会指向第一行,顺次向下读。 Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while(c.moveToNext()){ System.out.println(">>>>>>> " + c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); } } }