Android数据存储—ContentProvider共享数据

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"/>

放在节点外


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应用)