在开发中往往有要获取联系人列表的功能,但是这次却不是获取联系人列表,而是在联系人列表点击单个联系人,获取单个联系人的姓名和电话,并设置在指定的输入框内,方便用户的使用;以下是实现的代码:
<?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); 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); 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是内存溢出为你收集整理的Android获取联系人姓名和电话代码全部内容,希望文章能够帮你解决Android获取联系人姓名和电话代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)