Android获取联系人姓名和电话代码
程序员文章站
2023-12-19 14:10:28
在开发中往往有要获取联系人列表的功能,但是这次却不是获取联系人列表,而是在联系人列表点击单个联系人,获取单个联系人的姓名和电话,并设置在指定的输入框内,方便用户的使用;以下...
在开发中往往有要获取联系人列表的功能,但是这次却不是获取联系人列表,而是在联系人列表点击单个联系人,获取单个联系人的姓名和电话,并设置在指定的输入框内,方便用户的使用;以下是实现的代码:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <linearlayout android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingleft="10dp" android:text="姓名:" android:textcolor="@android:color/black" android:textsize="13sp" /> <edittext android:id="@+id/et_name" android:layout_width="200dp" android:layout_height="fill_parent" android:layout_marginleft="10dp" /> <button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="40dp" android:text="点击" /> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingleft="10dp" android:text="电话:" android:textcolor="@android:color/black" android:textsize="13sp" /> <edittext android:id="@+id/et_phone" android:layout_width="200dp" android:layout_height="fill_parent" android:layout_marginleft="10dp" android:inputtype="phone" /> </linearlayout> </linearlayout>
这个就是一个普通的布局文件代码;
/** * 获取联系人电话 * * @param cursor * @param context * @return */ private contactben getcontactphone(cursor cursor, context context) { contactben vo = new contactben(); int phonecolumn = cursor.getcolumnindex(contactscontract.contacts.has_phone_number); int phonenum = 0; try { phonenum = cursor.getint(phonecolumn); } catch (exception e) { return null; } // string phoneresult = ""; if (phonenum > 0) { // 获得联系人的id号 int idcolumn = cursor.getcolumnindex(contactscontract.contacts._id); string contactid = cursor.getstring(idcolumn); vo.name = cursor.getstring(cursor.getcolumnindex(contactscontract.contacts.display_name)); // 获得联系人的电话号码的cursor; cursor phones = context.getcontentresolver().query(contactscontract.commondatakinds.phone.content_uri, null, contactscontract.commondatakinds.phone.contact_id + " = " + contactid, null, null); if (phones.movetofirst()) { // 遍历所有的电话号码 for (; !phones.isafterlast(); phones.movetonext()) { int index = phones.getcolumnindex(contactscontract.commondatakinds.phone.number); int typeindex = phones.getcolumnindex(contactscontract.commondatakinds.phone.type); int phone_type = phones.getint(typeindex); string phonenumber = phones.getstring(index); switch (phone_type) { case 2: vo.phone = phonenumber; break; } } if (!phones.isclosed()) { phones.close(); } } } return vo; }
这里是主要功能的代码,在这里要做一个try catch的动作,因为android手机的话会将微信还有qq的联系方式也添加到列表中,但是其实是没有电话号码,点击返回的时候,就会获取不到,如果没有try catch的就会报异常;
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); switch (requestcode) { case (1): { if (resultcode == activity.result_ok) { if (data != null) { uri contactdata = data.getdata(); @suppresswarnings("deprecation") cursor c = mainactivity.this.managedquery(contactdata, null, null, null, null); c.movetofirst(); contactben contactphone = getcontactphone(c, mainactivity.this); if (contactphone == null) { contactphone = new contactben(); } et_name.settext("" + contactphone.name); et_phone.settext("" + contactphone.phone); } } break; } } }
这里是获取值的一个回调,在这个回调中可以获取到你想要的数据;
findviewbyid(r.id.btn1).setonclicklistener(new onclicklistener() { @override public void onclick(view v) { requestpermission(new string[] { manifest.permission.read_contacts }, new permissionhandler() { @override public void ongranted() { intent intent = new intent(intent.action_pick, contactscontract.contacts.content_uri); startactivityforresult(intent, 1); } @override public void ondenied() { super.ondenied(); } }); } });
这里是点击事件的处理,已经做了android6.0及6.0以上系统权限的适配了;最后记得在清单文件中添加相应的权限:
最终效果如下:
源码地址:contactperson
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。