Android ContentProvider实现手机联系人读取和插入
程序员文章站
2024-02-06 10:40:22
本文实例为大家分享了android实现手机联系人读取和插入的具体代码,供大家参考,具体内容如下
目标效果:
先在模拟器随便添加两个联系人,运行程序,...
本文实例为大家分享了android实现手机联系人读取和插入的具体代码,供大家参考,具体内容如下
目标效果:
先在模拟器随便添加两个联系人,运行程序,再打开联系人,发现多了联系人“张三”,并且日志输出了三给安溪人的姓名和手机号码还有号码类型。(运行多次,所以插入的id不为3了)
1.activity_main.xml页面暂时用不到,所以不需要改动。
2.mainactivity.java页面编写查询和添加方法。
mainactivity.java页面:
package com.example.contentprovider; import android.net.uri; import android.os.bundle; import android.provider.contactscontract; import android.provider.contactscontract.commondatakinds; import android.provider.contactscontract.commondatakinds.email; import android.provider.contactscontract.commondatakinds.phone; import android.provider.contactscontract.commondatakinds.structuredname; import android.provider.contactscontract.contacts; import android.provider.contactscontract.data; import android.provider.contactscontract.rawcontacts; import android.app.activity; import android.content.contentresolver; import android.content.contenturis; import android.content.contentvalues; import android.database.cursor; import android.util.log; import android.view.menu; public class mainactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); /*插入*/ insert(); /*查询*/ select(); } /*查询*/ private void select() { contentresolver cr=getcontentresolver(); /*第一个参数为uri,第二个参数为查询哪些列,第三个参数为查询条件,第五个参数为排序方式*/ /*查询id和姓名*/ cursor c=cr.query(contacts.content_uri,new string[]{contacts._id,contacts.display_name},null,null,null); if(c!=null){ while(c.movetonext()){ int id=c.getint(c.getcolumnindex("_id")); string name=c.getstring(c.getcolumnindex("display_name")); log.i("mainactivity","_id "+id); log.i("mainactivity","display_name "+name); /*根据id查询联系人的电话号码*/ cursor everyname=cr.query(phone.content_uri,new string[]{phone.number,phone.type},phone.contact_id+"="+id,null,null); if(everyname!=null){ while(everyname.movetonext()){ /*查询电话号码类型,type为0表示座机电话,type为1表示移动电话*/ int type=everyname.getint(everyname.getcolumnindex(phone.type)); if(type==phone.type_home){ log.i("mainactivity","座机电话"+everyname.getstring(everyname.getcolumnindex(phone.number))); }else if(type==phone.type_mobile){ log.i("mainactivity","移动电话"+everyname.getstring(everyname.getcolumnindex(phone.number))); } } everyname.close(); } /*根据id查询联系人的邮箱地址*/ cursor everyemail=cr.query(email.content_uri,new string[]{email.data,email.type},email.contact_id+"="+id,null,null); if(everyemail!=null){ while(everyemail.movetonext()){ int type=everyemail.getint(everyemail.getcolumnindex(email.type)); if(type==email.type_work){ log.i("mainactivity","工作邮箱"+everyemail.getstring(everyemail.getcolumnindex(email.data))); } } everyemail.close(); } } c.close(); } } /*插入*/ private void insert() { contentresolver cr=getcontentresolver(); /*向联系人中插入一行数据*/ contentvalues values=new contentvalues(); uri uri=cr.insert(rawcontacts.content_uri, values); long raw_contact_id=contenturis.parseid(uri); values.clear(); //插入姓名 values.put(structuredname.raw_contact_id,raw_contact_id); values.put(structuredname.display_name,"张三"); values.put(structuredname.mimetype,structuredname.content_item_type); uri=cr.insert(data.content_uri,values); //插入电话信息 values.clear(); values.put(phone.raw_contact_id,raw_contact_id); values.put(phone.number,"13333333333");//添加号码 values.put(phone.mimetype,phone.content_item_type); values.put(phone.type,phone.type_mobile);//添加号码类型 uri=cr.insert(data.content_uri, values); } }
3.操作联系人需要获取权限,所以在androidmainfest.xml页面中的permissions栏目里进行添加。
4.程序运行就可以显示目标效果了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。