Android 之 ContentProvider手机簿使用
程序员文章站
2024-02-09 17:58:22
...
[color=darkred][size=x-large][align=center]ContentProvider 简介[/align][/size][/color]
[b][size=medium][color=olive]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[/color][/size][/b]
[size=small][b][color=red]7. 使用通讯簿的权限:[/color][/b][/size]
[size=small][color=brown][b]下列代码演示如何获取手机通讯簿中的数据以及插入数据:
<!-- 权限:用于读取系统通讯簿 -->[/b][/color][/size]
[b][size=medium][color=olive]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[/color][/size][/b]
[size=small][b][color=red]7. 使用通讯簿的权限:[/color][/b][/size]
a) <uses-permission android:name=”android.permission.READ_CONACTS”/>
b) <uses-permission.android:name=”android.permission.WRITE_CONTACTS”/>
[size=small][color=brown][b]下列代码演示如何获取手机通讯簿中的数据以及插入数据:
<!-- 权限:用于读取系统通讯簿 -->[/b][/color][/size]
<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, "[email protected]"); // 数据
cv.put(Email.TYPE,Email.TYPE_WORK); // Email 类型,工作,家庭
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,cv);
}
});
}
}
上一篇: 多线程共享数据
下一篇: application内置对象
推荐阅读
-
Android 之 ContentProvider手机簿使用
-
android ContentProvider使用
-
Android ContentProvider实现手机联系人读取和插入
-
Android - Gradle 使用干货 之 生成 jar 包 和 生成混淆的 jar 包 和 上传
-
Android基础之使用Fragment控制切换多个页面
-
Android开发者的Anko使用指南(四)之Layouts
-
Android学习笔记之——使用Android的日志工具Log
-
Android性能优化之LeakCanary的使用及项目中的实际运用
-
android存储方式之ContentProvider存储方式讲解
-
Android视频播放之JiaoZiVideoPlayer框架的使用