android内容提供者总结

35.内容提供者:ContentResolver
用内容提供者来获取联系人信息
35-1:权限
<!-- 对联系人的读、写权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
35-2:新建实体类存放联系人
int c_id;
String c_name;
String c_phone;
String c_email;
set和get方法以及构造方法
35-3:新建Uri
Uri uri = ContactsContract.Contacts.CONTENT_URI;//联系人姓名
Uri uriPhone = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//联系人电话
Uri uriEmail = ContactsContract.CommonDataKinds.Email.CONTENT_URI;//联系人邮箱
35-4:新建ContentResolver
ContentResolver resolver = this.getContentResolver();
35-5:用邮标来获取联系人名字
35-5-1:新建地址,通过邮标查询
Cursor cursor = resolver.query(uri, null, null, null, null);
35-5-2:开始查询
int contactIdIndex = 0;//联系人ID
int nameIndex = 0;//联系人姓名
if(cursor.getCount()>0){
contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
}
35-5-3:通过邮标的moveToNext()方式获取值
while(cursor.moveToNext()){
String contactId = cursor.getString(contactIdIndex);
name = cursor.getString(nameIndex);
……(此处还有下文代码)
}
35-6:用邮标来获取联系人号码(在上文while循环的基础上继续)
35-6-1:新建电话号码的Cursor邮标
//selection相当于SQL中的Where语句吧
String selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" +contactId;
Cursor phones = this.getContentResolver().query(uriPhone,null, selection, null, null);
int phoneIndex = 0;
35-6-2如果查询到了,就返回phoneIndex
if(phones.getCount()>0){
phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
}
35-6-3:同上获取值
while(phones.moveToNext()){
phoneNumber = phones.getString(phoneIndex);
……(如果还要获取邮箱,同理在此处写上代码)
}
35-7:获取邮箱
35-7-1:新建邮标查询
String selectionEmail = ContactsContract.CommonDataKinds.Email.CONTACT_ID +"="+contactId;
Cursor email = this.getContentResolver().query(uriEmail, null, selectionEmail, null, null);
35-7-2:查询并返回
int emailIndex = 0;
if(email.getCount()>0){
emailIndex = email.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
}
35-7-3:同上获取值
while (email.moveToNext()) {
Email = email.getString(emailIndex);
}

如果觉得看得麻烦,可以直接用下面现成的代码:
注:请加权限及实例

Toast.makeText(getApplicationContext(), "正在获取信息", 0).show();
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
int contactIdIndex = 0;
int nameIndex = 0;
Contact contact;
if (cursor.getCount() > 0) {
contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
}else{
Toast.makeText(getApplicationContext(), "您没有联系人信息", 0).show();
}
while (cursor.moveToNext()) {
String contactId = cursor.getString(contactIdIndex);
name = cursor.getString(nameIndex);

String selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ "=" + contactId;
Cursor phones = this.getContentResolver().query(uriPhone, null,selection, null, null);
int phoneIndex = 0;
if (phones.getCount() > 0) {
phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
}
while (phones.moveToNext()) {
phoneNumber = phones.getString(phoneIndex);
Toast.makeText(getApplicationContext(), name+"==="+phoneNumber, 0).show();
contact = new Contact(name, phoneNumber);
list.add(contact);
}
}

时间: 2024-09-28 16:58:32

android内容提供者总结的相关文章

Android 内容提供者的实现

接着上文<Android 内容提供者简介>进一步实现内容提供者. 每个Content Provider类都使用URI(Universal Resource Identifier,通用资源标识符)作为独立的标识,格式如:content://com.example.app.provider/table1.其他应用程序通过不同的uri访问不同的内容提供者,并获取/操作里面的数据. 例如在本项目中对应如下URI: content://com.wuyudong.db.personprovider/ins

Android 内容提供者(ContentProvider)的简单实用

Android 中的数据库是对应用私有的,自己是无法使用别的应用的数据库的.但是往往有需求要我们使用另外一个应用或者系统应用的数据,这时候就彰显了内容提供者,ContentPrivider的作用,他就是两个应用数据的桥梁,通过内容提供者和内容接受者我们可以在不同应用间传递数据. ContentPrivider也可以视为一种数据存储.它存储数据的方式和使用它的应用程序无关,重要的是应用如何以一致的编程接口,来访问存储其中的数据.内容提供者与数据库的使用差不多,也可以增删改查.而且数据可以存储于数据

[android] 内容提供者简介

产生的原因是,当我们把数据存到数据库的时候,数据库的权限是私有的,把系统的短信应用中的数据库导出来,打开看到address字段是手机的号码,date字段是时间,type字段1,2代表发出去的短信和接受到的短信,body字段代表短信的数据.要想让别的应用程序访问自己数据库的数据,这时需要自己把数据给暴露出来. 新建一个类比如PersonProvider,先继承系统的ContentProvider类,这个类是android四大组件之一,暴露自己的私有数据,别的应用通过ContentResolver类

Android内容提供者(Content provider)

使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.而使用ContentProvider共享数据的好处是统一了数据访问方式. 当应用需要通过ContentP

Android 内容观察者的原理

拦截短信,比如当发短信的时候,就把短信读取出来,当系统的短信发生变化的时候,大叫一声,把数据发送到公共的消息邮箱里面,我们的应用通过内容观察者观察公共的消息邮箱 获取ContentResolver对象,调用函数getContentResolver(), 调用ContentResolver对象的registerContentObserver(uri,notifyForDescendents,observer)方法,参数:Uri对象,是否精确uri(true不精确,false精确),observer

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

android 53 ContentProvider内容提供者

ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标准的方法而且不用知道音频文件在那个文件夹里面,只要设置条件就可以找到. 安卓系统把音视频.图片存在系统内部的数据库里面,ContentProvider操作的是数据库不是去文件夹里面去找.sd卡和内存卡的文件安卓系统都会登记,登记文件类型.路径,文件名,文件大小都保存在数据库里.ContentProv

Android四大基本组件(2)之Service 服务与Content Provider内容提供者

一.Service 服务: 一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序. 比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器.在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲.然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的.在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从

Android 中内容提供者的使用

在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现有的内容提供器来读取和操作相应程序的数据 ContentResolve中提供了一系列的方法用于对数据进行增删改查的操作,其中,insert()用于添加数据,update()用于数据更新,delete()方法用于删除数据,query()用于数据的查询. 在ContentResolve中,使用内容URI