欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android使用ContentResolver搜索手机通讯录的方法

程序员文章站 2024-02-14 10:07:46
本文实例讲述了android使用contentresolver搜索手机通讯录的方法。分享给大家供大家参考,具体如下: 在这个程序中使用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程序设计有所帮助。