当前位置: 移动技术网 > 移动技术>移动开发>Android > Android使用ContentResolver搜索手机通讯录的方法

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

2019年07月24日  | 移动技术网移动技术  | 我要评论
本文实例讲述了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程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网