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

放在<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,将自定义的数据提供给其他的应用程序使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值