数据在android中是私有的,当然这而数据包括文件数据和数据库数据以及一些其他类型的数据。那么两个程序之间如何进行数据交换呢?解决这个问题主要靠ContentProvider。一个ContentProvider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说一个程序可以通过实现ContentProvider的抽象接口将自己的数据暴露出去。外界根本看不到,也就不用看到这个应用暴露的数据在应用当中如何存储的,或者是用数据库存储还是文件存储,还是网络存储。外界可以通过这套标准及统一的接口和程序中的数据打交道,可以操作程序中的数据。
外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver可以得到当亲的ContentResolver实例。ContentResolver提供的接口和ContentProvider中需要实现的接口对应。在ContentResolver中到相应的接口的话,ContentProvider会执行相应的接口,把结果返回。
要读取通讯录,要配置一下权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
稍微解释一下代码,首先通过ContentResolver来查询出所有通讯录中的cursor,然后将Cursor传入一个自定义的CursorAdapter,将该adapter绑定给一个AutoCompleteTextView。
package com.kevin.contentresolver;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
public class Main extends Activity {
private AutoCompleteTextView autoTextView;
private TextView tv_result;
private Cursor cursor;
private ContactAdapter adapter;
private ContentResolver resolver;
// 要去取出通讯录的字段
public static final String[] PEOPLE_PROJECTION = {
ContactsContract.Contacts._ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.Contacts.DISPLAY_NAME
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
autoTextView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
tv_result = (TextView)findViewById(R.id.tv_result);
// 取得ContentResolver对象
resolver = getApplication().getContentResolver();
// 取得通讯录的Cursor
/*
* 第一个参数是一个使用content:// scheme的URI
* 第二个参数是要返回的列名,为空则返回全部
* 第三个参数是where条件
* 第四个参数是条件的值
* 第五个参数是排序
*/
cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
PEOPLE_PROJECTION, null, null, null);
// 将cursor传入自己实现的ContactsAdapter
adapter = new ContactAdapter(this, cursor);
autoTextView.setAdapter(adapter);
autoTextView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// 取得Cursor
Cursor c = adapter.getCursor();
// 移动到所点击的位置
c.moveToPosition(position);
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
// 找不到电话时显示无输入电话
number = number == null ? "无输入电话" : number;
tv_result.setText(c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
+ "的电话是 " + number);
}
});
}
}
分享到:
相关推荐
在Android系统中,ContentResolver是一个至关重要的组件,它充当了应用程序与ContentProvider之间的桥梁,使得应用能够方便地读取、写入、更新和删除由ContentProvider管理的数据。ContentResolver提供了标准化的API...
在Android系统中,ContentProvider和ContentResolver是两个关键组件,它们为应用程序间的共享数据提供了统一的接口。在Android开发中,如果我们需要对数据库进行增、删、改、查(CRUD)操作,这两个组件就显得尤为...
在Android系统中,获取手机联系人信息是常见的需求,这通常涉及到ContentProvider和ContentResolver两个核心组件。ContentProvider是Android中用于数据共享和跨应用数据访问的机制,而ContentResolver则是应用程序与...
在Android应用开发中,ContentResolver和ContentProvider是两个至关重要的组件,它们负责应用程序间的数据共享和访问。ContentResolver充当客户端,而ContentProvider作为服务端,实现了Android系统中不同应用程序...
ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。 ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下...
Android 应用程序之间数据共享 ContentResolver Android 应用程序之间数据共享是一种非常重要的机制,它允许不同的应用程序之间共享数据,并且提供了一个标准的接口来访问和操作这些共享数据。ContentResolver 是 ...
在Android开发中,`ContentResolver` 是一个非常重要的组件,它负责与系统的内容提供者(Content Provider)进行交互,从而获取或修改系统中的数据。在这个"ContentResolver_Contacts_Demo"示例中,我们将深入探讨...
在安卓开发中,ContentResolver是Android系统提供的一种接口,用于与内容提供者(Content Provider)进行交互,从而访问和管理应用程序的数据,如联系人、日历等。本项目"安卓ContentResolver操作通讯录demo"是一个...
为了实现这一目标,Android提供了一种安全、标准化的方式,即通过ContentProvider和ContentResolver组件。本文将深入探讨这两个组件的工作原理及其在实现Android程序间数据共享中的应用。 首先,ContentProvider是...
内容概要: ...能学到什么:ContentProvider、ContentResolver、CursorAdapter、Cursor、后台服务、前台服务、绑定服务、自定义广播、播放进度条、OnClickListener监听器 适用人群:Android开发初学者
2. **ContentResolver**:ContentResolver是Android系统中的一个接口,它允许应用程序与其他应用程序的数据进行交互,尤其是与ContentProvider相关的数据。例如,读取和写入联系人、媒体文件等。通过URI(统一资源...
【ContentResolver使用场景】 ContentResolver是Android系统中用于在应用程序之间进行数据交互的重要工具,它提供了统一的接口,使得应用程序可以方便地访问和操作其他应用或系统服务提供的数据,如联系人、日历、...
在Android系统中,ContentProvider和ContentResolver是两个关键组件,它们是Android应用程序间数据共享的主要机制。通过ContentProvider,一个应用可以将自己的数据暴露给其他应用访问,而ContentResolver则充当了...
ContentProvider与ContentResolver 与 SQLiteOpenHelper http://blog.csdn.net/i_do_can/article/details/50937380 http://blog.csdn.net/i_do_can/article/details/50937380
设计App通过ContentResolver的使用场景,访问系统中所有联系人并将其以列表形式展示出来,长按联系人姓名会弹出菜单显示添加、删除、排号等相关操作,选择菜单执行相关操作,如选择删除将删除选中的联系人,选择拔号...
### ContentResolver 数据库操作 #### 一、ContentResolver与ContentProvider关系分析 在Android系统中,`ContentResolver`和`ContentProvider`是实现跨进程数据访问的重要机制之一。`ContentResolver`作为客户端...
在Android开发中,ContentProvider和ContentResolver是两个关键组件,它们构成了Android系统中不同应用程序间数据共享的基础。本文将深入探讨如何自定义ContentProvider和如何有效地使用ContentResolver进行数据操作...
为了实现这一点,Android提供了一套机制,其中核心组件是ContentResolver和ContentProvider。ContentResolver允许应用程序对ContentProvider进行数据查询、插入、更新和删除操作,而无需了解数据存储在何处。...