Android使用ContentResolver搜索手机通讯录的方法
本文实例讲述了android使用contentresolver搜索手机通讯录的方法。分享给大家供大家参考,具体如下:
在这个程序中使用contentresolver来访问通讯录里联系人的关键字,并将所有找到的联系人存入cursoradapter里。输入搜索人员名字a ,会将所有以a开头的名字都显示出来,输入*,则所有通讯录中的人名显示于autocompleteview的adapterview里,若发生了user选择事件后,会将勾选的联系人电话号码显示于textview里。
此程序中用到了contentresolver .query(uri uri, string[] projection, string selection, string[] selectionargs, string sortorder)来取出通讯录里的所有联系人;其中将selection及selectionargs传入null代表将所有联系人找出来。用cursor 的getstring(column index)的方式来取得存储内容,其中column index从0开始,这一点与java.sql.resultset不同,因为它是从1开始的。用autocompletetextview.onitemclicklistener事件,这也是当用户单击联系人之后所拦截的事件处理,在其中便以contactsadapter.getcursor()方法取得联系人的电话号码。
程序如下:
import android.app.activity; import android.content.contentresolver; import android.database.cursor; import android.os.bundle; import android.provider.contacts; import android.view.view; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.autocompletetextview; import android.widget.textview; @suppresswarnings("deprecation") public class a07activity extends activity { private autocompletetextview actv; private textview tv; private cursor c01; private contactsadapter ca; //找出通讯录中的字段 public static string[] people={ contacts.people._id, contacts.people.primary_phone_id, contacts.people.type, contacts.people.number, contacts.people.label, contacts.people.name }; /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); actv=(autocompletetextview)findviewbyid(r.id.actv); tv=(textview)findviewbyid(r.id.tv); contentresolver cr=getcontentresolver(); c01=cr.query(contacts.people.content_uri, people, null, null, contacts.people.default_sort_order); ca=new contactsadapter(this,c01); actv.setadapter(ca); actv.setonitemclicklistener(new onitemclicklistener(){ @override public void onitemclick(adapterview<?> arg0, view arg1, int arg2, long arg3) { // todo auto-generated method stub cursor c02=ca.getcursor(); c02.movetoposition(arg2); string number=c02.getstring(c02.getcolumnindexorthrow(contacts.people.number)); number=number==null?"无电话输入": number; tv.settext(c02.getstring(c02.getcolumnindexorthrow(contacts.people.name))+"的电话是:"+number); } }); } }
import android.content.contentresolver; import android.content.context; import android.database.cursor; import android.provider.contacts; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.cursoradapter; import android.widget.textview; @suppresswarnings("deprecation") public class contactsadapter extends cursoradapter{ contentresolver cr; public contactsadapter(context context, cursor c) { super(context, c); // todo auto-generated constructor stub cr=context.getcontentresolver(); } @override public void bindview(view view, context context, cursor cursor) { // todo auto-generated method stub ((textview)view).settext(cursor.getstring(cursor.getcolumnindexorthrow(contacts.people.name))); } @override public view newview(context context, cursor cursor, viewgroup parent) { // todo auto-generated method stub final layoutinflater li=layoutinflater.from(context); final textview tv=(textview)li.inflate(android.r.layout.simple_dropdown_item_1line, parent, false); tv.settext(cursor.getstring(cursor.getcolumnindexorthrow(contacts.people.name))); return tv; } public string convertostring(cursor c){ return c.getstring(c.getcolumnindexorthrow(contacts.people.name)); } @suppresswarnings("null") public cursor runqueryonbackgroundthread(charsequence cs){ if(getfilterqueryprovider()!=null){ getfilterqueryprovider().runquery(cs); } stringbuilder sb=null; string[] s=null; if(cs==null){ sb=new stringbuilder(); sb.append("upper("); sb.append(contacts.contactmethods.name); sb.append(")glob?"); s=new string[]{cs.tostring().touppercase()+"*"}; } return cr.query( contacts.people.content_uri, a07activity.people, sb==null? null:sb.tostring(), s, contacts.people.default_sort_order ); } }
androidmanifest.xml如下所示:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.a07" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".a07activity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.read_contacts"></uses-permission> </manifest>
通过contentresolver还可以添加、修改、删除通讯录中的信息;并且通过它还可以访问audio、video、images等数据。相应方法展示如下:
添加:public final uri insert(uri uri,contentvalues values),contentvalue.put(key,value) ,其中key为字段名称,value为添加的数据。
修改:public final int update(uri uri,contentvalues values,string where ,string[] selectionargs),其中where为sql where 后面的条件字符串。selectionargs为where里的数据。
删除:public final int delete(uri uri,string where,string[] selectionargs).
下面再使用contentvalue.put()方法。通过程序添加通讯录里的联系人的资料。
更多关于android相关内容感兴趣的读者可查看本站专题:《android控件用法总结》及《android开发入门与进阶教程》
希望本文所述对大家android程序设计有所帮助。