ContentProvider 简介
1. 介绍:四大组件之一,与Activity 和 Service 相同,使用前是需要注册的;
2. 作用:需要将自己的数据暴露给其他应用程序使用时,该程序就可以通过提供ContentProvider 来实现,其他的应用程序就可以通过ContentResolver 来操作Content Provider 暴露的数据; 开放了应用程序不需要启动,其他应用程序都可以操作开放的数据,包括增删该查;
3. 开发步骤:
a) 继承Android 的 ContentProvider 基类实现自己的ContentProvider 类;
b) 在主配置文件中注册,并制定以下信息:
i. Uri : 类似于访问中使用的URL 地址;
ii. Uri 以content//: 固定开头,包括注册时指定的路径和资源;
iii. 为每个Uri指定访问时需要返回的数据和其他操作;
4. 提示:应用程序使用ContentRsolver 通过ContentProvider 的Uri 访问开放的数据;
5. 案例 - ---- 访问手机通讯簿
a) 主表介绍:
i. Raw_contacts :这个表放的是联系人的唯一标识ID ,靠外键进行对应
ii. Data: 存放的是具体的信息 ,各种数据
iii. Contacts: 这个表放的是一条条的联系人,主要存的是display_name,没有号码。
iv. Calls 表: 存放的的呼叫记录;
6. Uri:
a) 管理联系人的Uri: ContactsContract.Contacts.CONTENT_URI
b) 管理联系人电话的Uri:ContactsContract.CommonDataKinds.phone.CONTENT_URL
c) 管理联系人Email 的 Uri:ContactsContract.CommonDataKinds.Email.CONTENT_URL
7. 使用通讯簿的权限:
a) <uses-permission android:name=”android.permission.READ_CONACTS”/>
b) <uses-permission.android:name=”android.permission.WRITE_CONTACTS”/>
下列代码演示如何获取手机通讯簿中的数据以及插入数据:
<!-- 权限:用于读取系统通讯簿 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
// 主程序代码
public class MainActivity extends Activity {
private Button getInfo,add;
// 程序入口
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add = (Button) findViewById(R.id.add);
getInfo = (Button) findViewById(R.id.getInfo);
getInfo.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID)); // ID 编号
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 姓名
Toast.makeText(MainActivity.this,"编号:"+_id+"\n姓名:"+name , 1000).show();
}
}
});
add.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 插入数据前必须先在 rawContactID 占一个空位
ContentValues cv = new ContentValues();
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, cv); // 返回的是一个Uri
// 解析出ID 的值 -- 占位的ID 值,记录标识的是属于哪一个人
long rawContactID = ContentUris.parseId(rawContactUri);
// 根据对应的ID 值,插入数据
/* 插入姓名 */
cv.clear();
cv.put(Data.RAW_CONTACT_ID, rawContactID);
/* mimitype_id 字段,用于描述此数据的类型:姓名、电话号码、e_mail... */
cv.put(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
cv.put(StructuredName.GIVEN_NAME, "xiaobaibai"); // 具体数据
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, cv);
/* 向data表中插入电话数据 */
cv.clear();
cv.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactID);
cv.put(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE); // 号码的数据类型
cv.put(Phone.NUMBER, "19915200"); // 号码
cv.put(Phone.TYPE, Phone.TYPE_MOBILE); // 号码类型为手机号
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, cv);
/* 向Data 中插入Email 数据 */
cv.clear();
cv.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactID); // 对应的ID
cv.put(ContactsContract.Contacts.Data.MIMETYPE,Email.CONTENT_ITEM_TYPE); // 数据类型
cv.put(Email.DATA, "hao123@qq.com"); // 数据
cv.put(Email.TYPE,Email.TYPE_WORK); // Email 类型,工作,家庭
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,cv);
}
});
}
}
分享到:
相关推荐
4. **ContentProvider**:虽然SQLite可以直接访问,但使用ContentProvider可以标准化数据的访问方式,使得其他应用也能安全地访问你的通讯录数据。ContentProvider是Android系统中提供数据共享的接口。 5. **...
在Android平台上,获取手机联系人是一项常见的功能,它涉及到Android系统的权限管理、ContentResolver和ContentProvider等核心组件。本文将详细讲解如何在Android应用中获取用户的联系人信息。 首先,要获取手机...
总的来说,这个项目涵盖了Android开发中的许多核心概念,包括UI设计、Activity与Fragment的管理、ContentProvider的使用、SQLite数据库操作、用户交互处理以及数据同步。对于想要深入学习Android开发的初学者来说,...
本项目"Android-一个通过电话簿的内容提供器获取电话簿中联系人及相关信息进行显示的电话通讯录"正是基于这一机制实现的,旨在展示如何利用内容提供器来访问和操作手机的电话簿数据。 首先,我们需要了解Android中...
开发者需要理解Android的组件模型(如Activity、Service、BroadcastReceiver、ContentProvider等)和生命周期管理。 2. **Java编程语言**:作为Android应用开发的主要语言,Java提供了面向对象的特性,支持多线程,...
在Android系统中,通讯录是用户的重要数据之一,包含了联系人姓名、电话号码、电子邮件等个人信息。为了确保这些数据的安全,开发一个手机通讯录备份与恢复功能是非常必要的。本源码实现了这一功能,并以Excel表格的...
本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为...
Android系统内置了对vCard的支持,可以通过ContentProvider接口进行读取和写入操作。开发者可以利用ContentResolver来访问联系人数据,并将其转换为vCard格式,以便通过PBAP进行分享。 3. **Javax.OBEX** javax....
本项目“ContactProvide电话簿案例”旨在教你如何利用ContentProvider来读取手机中的联系人信息,并且提到了用户需要手动添加联系人,这暗示了应用可能不包含自动同步或导入联系人的功能。 首先,让我们深入了解...
虽然在描述中未直接提及,但在处理电话簿或短信数据时,ContentProvider的作用至关重要。 在Android应用开发中,单元测试也是非常关键的一环,用于验证代码的各个部分是否按预期工作。对于四大组件,我们可以通过...
本文将深入探讨如何使用ContentProvider机制来获取手机电话簿中的联系人信息,包括姓名、电话以及头像。 首先,理解ContentProvider是Android系统提供的一种数据共享机制,它允许应用程序之间安全地共享数据。在...
- **数据存储**:Android提供了多种数据存储方式,包括文件存储、SharedPreferences、SQLite数据库、ContentProvider等。根据应用场景选择合适的数据存储方式是非常重要的。 - **网络编程**:Android应用开发中经常...
|--图片之删除40%最近没有被使用的 |--图片之的本地缓存至SD卡 |--图片之网络异步下载图片 |--图片之获取SD卡所有及边界可调及压缩和软引用和内存回收 |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出...
在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题。本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码。分享给大家供大家参考之用。具体方法如下: 首先,通过...
在Android系统中,Phone模块是核心组件之一,它负责处理手机相关的通信功能,包括拨打电话、接收来电、短信服务等。深入理解Phone模块的源码有助于开发者更好地定制系统服务,优化通信性能,或者开发与电话功能相关...
- EF文件用于存储关键信息,例如联系人信息、电话簿等,并与手机进行数据交换。 #### 九、Android动画的种类及其特点 - **Tween动画与Frame动画**: - 参见“二、Android中的动画类型及其特点”。 #### 十、...
开发者需要了解SQL语句,以及Android的ContentProvider和CursorAdapter来实现数据的增删查改和UI的动态更新。 5. **事件监听与响应** 用户的点击、滑动等操作需要被监听并作出响应,这通常通过设置OnClickListener...