关于ContentProvider的一些例子(获取联系人)

ContentResolver:是Android的四大组件之一,主要用于对外共享数据。

Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。前提是已经获取其权限。

主要方法

public boolean onCreate() 在创建ContentProvider时调用
public Cursor query(Uri, String[], String, String[], String) 查询ContentProvider,返回一个Cursor
public Uri insert(Uri, ContentValues) 添加数据到ContentProvider中
public int update(Uri, ContentValues, String, String[]) 更新ContentProvider中的数据
public int delete(Uri, String, String[]) 从指定Uri的ContentProvider中删除数据
public String getType(Uri) 返回指定的Uri中的数据的MIME类型

ContentResolver

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。

ContentResolver提供的方法和ContentProvider提供的方法对应的有以下几个方法。
public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定Uri的ContentProvider中。
public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定Uri的ContentProvider中删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用于更新指定Uri的ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用于查询指定Uri的ContentProvider。

3.Uri
Uri 代表了要操作的数据,Uri 主要包含了两部分信息:1、需要操作的
ContentProvider;2、对ContentProvider中的什么数据进行操作。一个Uri由以
下几部分组成: 

package com.example.contentprovider;

import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

ListView listview;
ArrayAdapter< String>adapter;
List<String> data=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView) findViewById(R.id.list);
Log.i("ab", "a0");
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1
,data);
listview.setAdapter(adapter);
Log.i("ab", "a1");
readContacts();

}
private void readContacts(){
Cursor cursor=null;
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
null,
null,
null);
Log.i("ab", "a2");

while (cursor.moveToNext()) {
//获取联系人姓名
String displayName=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.i("ab", "a3");
//获取联系人手机号
String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i("ab", "a4");
data.add(displayName+"\n"+number);
Log.i("ab", "a5");

}

}

}

步骤:

第一步:写listview控件,并找到控件

第二步:创建适配器

第三步:通过getContentResolver()的qury()方法查询并赋给cursor 对象(cursor 相当于一个指针的作用)

第四步:使用while 循环判断知道最后个数据被读出来。

未完待续:下一个例子 获取多媒体文件

此篇博客借鉴于http://caizhiyong.blog.51cto.com/3333164/1246769这篇博客如果有不明白的地方可去源博客。

ps 此博客作为笔记来用

时间: 2024-10-25 19:44:25

关于ContentProvider的一些例子(获取联系人)的相关文章

ContentProvider往通讯录添加联系人和获取联系人

在Android中,可以使用ContentResolver对通信录中的数据进行添加.删除.修改和查询操作. 在对联系人进行操作时需加入以下两个权限 <!-- 添加操作联系人的权限 --><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS&

Android(java)学习笔记249:ContentProvider使用之获得系统联系人信息

1.系统联系人的数据库(3张最重要的表) (1)raw_contacts  联系人表        保存联系人的id   contact_id (2)data 数据表       保存联系人的数据 (3)mimetypes       MIME数据类型表 2.思考? 如何获取联系人的数据. (1) 查询raw_contacts  获取所有的联系人的id : (2)  根据id查询data表,获取当前联系人的数据 :     3.因为如果要访问ContentProvider,必须要了解URI的设置

Android学习笔记二十一.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider

Android系统本身提供了大量的ContentProvider,例如联系人信息.系统的多媒体信息等,我们开发的应用程序主要是通过ContentResolver来调用系统的ContentProvider提供的query().insert().update()和delete()方法来获取Android内部的数据. 一.如何使用ContentResolver操作系统ContentProvider暴露的内部数据? 1.调用Activity的getContentResolver()获取ContentRe

Android 获取联系人手机号码、姓名、地址、公司、邮箱、生日

public void testGetAllContact() throws Throwable { //获取联系人信息的Uri Uri uri = ContactsContract.Contacts.CONTENT_URI; //获取ContentResolver ContentResolver contentResolver = ContactListActivity.this.getContentResolver(); //查询数据,返回Cursor Cursor cursor = con

获取联系人信息

//这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block tip=0;     //声明一个通讯簿的引用     ABAddressBookRef addBook =nil;     //因为在IOS6.0之后和之前的权限申请方式有所差别,这里做个判断     if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {         //创建通讯簿的引用         addBook=A

内容提供者(获取联系人信息和插入联系人)

一丶获取联系人的信息 点击获取联系人信息 public void click(View view){        //获取内容解析器        ContentResolver resolver = getContentResolver() ;        //设定访问的uri(系统本机)        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts") ;//联系人的id        Uri d

【Android Developers Training】 99. 获取联系人详细信息

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer.android.com/training/contacts-provider/retrieve-details.html 这节课将会展示如何获取一个联系人的详细数据,比如电子邮件地址,电话号码,等等.当用户获得一个联系人后,他会想要查看他的详细信息.你可以展示给他们所有的信息,或者只展示某一特定类

获取联系人

①查询raw_contacts表 获取每一个联系人的contact_id值 ②拿着查到的这个contact_id 到data表中查询 (raw_contact_id这一列作为查询的条件)查mime_type_id 和 data1 data1的数据最终要保存起来 mimetype_id这一列的值是作为类型判断的依据 获取联系人private ArrayList<Contact> getContacts(ContentResolver resolver) { ArrayList<Contac

weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,

看了下第一期的访问量,100都没有可能很多人不需要吧,之前跟过一个大神学做项目,他都不吧核心代码告诉我,感觉没有一点分享精神,所以我就自己做.没跟他一起做 这里把上次的代码分享一下 我这里分享的跟我博客里面可能不一样因为我已经做完第一个模块了,代码就没有分开了 第一期的代码地址:http://download.csdn.net/detail/u010982856/8232855 分享的是类似的代码 基本跟我的是一样.如果需要的联系人我把 或者加入我的交流群吧 -----------欢迎加入交流群