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,将自定义的数据提供给其他的应用程序使用。
本文详细介绍了Android中的ContentProvider组件,包括如何使用系统自带的Contact数据,以及如何通过ContentResolver进行增删改查操作。同时,还提供了自定义ContentProvider的方法,以便于应用程序间的数据共享。
1906

被折叠的 条评论
为什么被折叠?



