ContentProvider是将私有的数据暴露给其他的使用者,如通话记录、短信、联系人列表等。也可以自定义ContentProvider,将自定义的数据提供给其他的应用程序使用。
ContentProvider提供数据
Android系统本身包含的一些内建程序,如联系人、短信、通话记录等,这些程序都可作为ContentProvider向其他应用提供数据。
public class MainActivity extends ListActivity {//继承ListActiviey
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Cursor cursor=this.managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);//用managedQuery查询联系人,并返回cursor对象。
ListAdapter adapter=new SimpleCursorAdapter(getBaseContext(), android.R.layout.simple_list_item_2, cursor, new String[]{ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, new int []{android.R.id.text1,android.R.id.text2});//新建适配器,显示姓名和电话号码
this.setListAdapter(adapter);
}
}
要成功运行,还需要在注册文件中添加权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
放在<application></application>
节点外
ContentResolver消费数据
public class MainActivity extends ListActivity {
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContentResolver resolver=getContentResolver();//得到ContentResolver对象
resolver.delete(Data.CONTENT_URI, StructuredName.DISPLAY_NAME+"=?",new String[]{ "Bob"});//删除名字为Bob的记录
}
}
同样也需要在注册文件中添加权限:
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
另外还有ContentResolver.query()
,ContentResolver.update()
,
ContentResolver.insert()
可以使用。
还可以自定义MyProvider继承自ContentProvider,将自定义的数据提供给其他的应用程序使用。