四大组件复习(三)

来源:互联网 发布:刺客信条2mac 编辑:程序博客网 时间:2024/04/28 08:41

下面复习一下四大组件的ContentProvider内容提供器,内容提供器可以实现数据共享的功能,允许一个程序访问另一个程序中的数据。内容提供器一般有两种形式,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器给我们程序的数据提供外部访问接口


一、利用现有的内容提供器来操作获取程序的数据

下面会通过一个获取手机联系人的例子进行学习

首先我们应该明白以下几点:

1、要访问内容提供器中共享的数据,就一定要借助ContentResolve类(获取实例的方法:)

2、获取到的ContentResolve实例可以进行查询、增加、修改、删除的操作(类似数据库)

接下来就直接看代码:

下面我们使用getContentResolver()获取ContentResolve实例,用该实例进行查询操作(查询方法中的参数的意义分别是uri:唯一标识符,由权限加路径组成,这里使用的是系统封装过后的Uri,所以不用使用parse()方法进行转化,projection:查询的列名,selection:指定Where的约束条件,selectionArgs为Where中的占位符提供具体的数值,orderBy:指定查询结果的排序方式,该方法返回的对象是Cursor对象,可以参考下面的图片)


Cursor cursor = null;try{    cursor = getContentResolver().query(         ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);    while (cursor.moveToNext()){        String name = cursor.getString(cursor.getColumnIndex(                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));        String number = cursor.getString(cursor.getColumnIndex(                ContactsContract.CommonDataKinds.Phone.NUMBER));        data.add(name + "\n" + number);        //然后将data添加到listView中显示出来即可     }}catch (Exception e){    e.printStackTrace();}finally {    if(cursor != null) {        cursor.close();    }}

当然还要记得在配置文件中添加获取联系人的权限:<uses-permissionandroid:name="android.permission.READ_CONTACTS"/>

下面尝试添加多一个联系人

ContentValues value = new ContentValues();value.put("column1","测试用来添加的联系人");value.put("column2",1234567);getContentResolver().insert(uri,value);
上面语法可以添加一个联系人(添加对应权限之后),但是在运行发现程序崩溃,显示程序安全权限不足,上网查询之后发现Android4.0之后处于安全考虑只有系统应用才能获取写入的权限

添加联系人的时候出现权限不足的情况,在网上查找的时候发现只有Eclipse的解决方法(解决方法可参考http://blog.csdn.net/chaoyu168/article/details/51555326),在AndroidStudio里面未找到对应的设置修改,之后解决的时候再回来补上去


我们可以尝试获取固定联系人的信息

(1)获取具体姓名的联系人信息,如我们获取姓名为“小西”的联系人信息

cursor = getContentResolver().query(            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,            null,            ContactsContract.Contacts.DISPLAY_NAME+"='小西'",null,null);

将第三个参数为指定的约束条件,这里我们设置姓名=‘小西’为条件

(2)获取知道部分号码的联系人信息,如获取电话中以137开头的联系人信息(LIKE前后记得空格)

cursor = getContentResolver().query(            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,            null,            ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE '137%'",null,null);


二、创建自己的内容提供器创建外部访问接口

null




0 0
原创粉丝点击