contentProvider

参考:http://blog.csdn.net/chuyuqing/article/details/39995607

1.定义:  当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

2.ContentProvider的应用场景

   为读取和储存数据提供了统一的接口.

   使用contentprovider可以使用应用程序之间的数据共享

   Android内置的数据都是contentprovider形式的,共开发者调用:如图片.音频.通讯录等

3.contentprovider查询的统一格式uri

 由三部分组成

content://

   content://media/internal/images  这个URI将返回设备上存储的所有图片
     content://contacts/people/  这个URI将返回设备上的所有联系人信息
     content://contacts/people/45 这个URI返回单个结果(联系人信息中ID45的联系人记录)

Android提供的uri的辅助类:

(在android.provider包下),里面包含了很多以类变量形式给出的查询字符串,这种方式更容易让我们理解一点,因此,如上面content://contacts/people/45这个URI就可以写成如下形式:

  Uri person = ContentUris.withAppendedId(People.CONTENT_URI,  45);

4.具体应用以手机通讯录为例

添加权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

1.查询通讯录

//查询记录
    private void displayRecords() {
        //该数组中包含了所有要返回的字段

        String columns[] = new String[]{Contacts.People.NAME, Contacts.People.NUMBER};
        Uri mContacts = Contacts.People.CONTENT_URI;
        Cursor cur = managedQuery(mContacts, columns, null, null, null);
        if (cur.moveToFirst()) {
            String name = null;
            String phoneNo = null;
            do {
                // 获取字段的值
                name = cur.getString(cur.getColumnIndex(Contacts.People.NAME));
                phoneNo = cur.getString(cur.getColumnIndex(Contacts.People.NUMBER));
                Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
            } while (cur.moveToNext());
        }
    }
2.修改通讯录

    //修改通讯录
    private void updateRecord(int recNo, String name) {
        Uri uri = ContentUris.withAppendedId(Contacts.People.CONTENT_URI, recNo);
        ContentValues values = new ContentValues();
        values.put(Contacts.People.NAME, name);
        getContentResolver().update(uri, values, null, null);
    }

3.插入通讯录

 //添加记录
    private void insertRecords(String name, String phoneNo) {
        ContentValues values = new ContentValues();
        values.put(Contacts.People.NAME, name);
        Uri uri = getContentResolver().insert(Contacts.People.CONTENT_URI, values);

        Uri numberUri = Uri.withAppendedPath(uri, Contacts.People.Phones.CONTENT_DIRECTORY);
        values.clear();
        values.put(Contacts.Phones.TYPE, Contacts.People.TYPE_MOBILE);
        values.put(Contacts.People.NUMBER, phoneNo);
        getContentResolver().insert(numberUri, values);
    }

4.删除通讯录

    //删除记录
    private void deleteRecords() {
        Uri uri = Contacts.Phones.CONTENT_URI;
        getContentResolver().delete(uri, null, null);
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值