在开发中往往有要获取联系人列表的功能,但是这次却不是获取联系人列表,而是在联系人列表点击单个联系人,获取单个联系人的姓名和电话,并设置在指定的输入框内,方便用户的使用;以下是实现的代码:
<&#63;xml version="1.0" encoding="utf-8"&#63;>
这个就是一个普通的布局文件代码;
/** * 获取联系人电话 * * @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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。