Android跳转到通讯录获取用户名称和手机号码的实现思路

效果图如下所示: 先给大家说下实现android 跳转到通讯录的实现思路: 1.点击跳转到通讯录界面 2.获取通讯录姓名和手机号码 3.回调显示姓名和手机号码 1首先是跳转到通讯录界面 Uri uri = Uri.parse(content://contacts/people); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, 0); 通过设置通讯录url跳转,可以看到我们用回调函数实现 2.回调函数 /* * 跳转联系人列表的回调函数 * */ @Overr 在Android应用开发中,有时我们需要实现从应用内部跳转到系统的通讯录,并从中获取用户的名称和手机号码。本文将详细讲解这一实现过程。 我们要做的是触发一个Intent来启动通讯录选择界面。这可以通过创建一个新的Intent并设置其ACTION_PICK属性来完成。以下是相关的代码片段: ```java Uri uri = Uri.parse("content://contacts/people"); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, 0); ``` 这里,我们使用`Uri.parse()`解析内容URI,指定为`content://contacts/people`,这表示我们要访问的是联系人列表。然后,通过`ACTION_PICK`设置Intent的意图,使得系统能够打开联系人选择器。通过`startActivityForResult()`启动这个Intent,传入请求码0,用于后续回调处理。 当用户在通讯录中选择一个联系人后,系统会返回结果。这时,我们需要重写`onActivityResult()`方法来接收并处理返回的数据: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 0: if(data == null) { return; } // 处理返回的data,获取选择的联系人信息 Uri uri = data.getData(); String[] contacts = getPhoneContacts(uri); et_name.setText(contacts[0]); et_tele.setText(contacts[1]); break; } super.onActivityResult(requestCode, resultCode, data); } ``` 在这个回调函数中,我们首先检查返回的Intent是否为空,然后通过`getData()`获取选中的联系人的Uri。接着,调用`getPhoneContacts(uri)`方法来获取联系人的名称和电话号码,并将结果显示在对应的EditText中。 `getPhoneContacts(uri)`方法是关键,因为它需要从Uri中提取出联系人的信息。由于联系人的名字和电话号码存储在不同的表中,所以需要分开查询: ```java private String[] getPhoneContacts(Uri uri) { String[] contact = new String[2]; // 获取ContentResolver对象 ContentResolver cr = getContentResolver(); // 取得联系人姓名 Cursor cursor = cr.query(uri, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); contact[0] = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 取得电话号码 String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? ", new String[]{ContactId}, null); if (phone != null) { phone.moveToFirst(); contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phone.close(); cursor.close(); } else { return null; } return contact; } ``` 这段代码首先获取联系人的显示名称,然后根据联系人的ID查询电话号码。注意,这两个查询都需要使用ContentResolver,它是Android系统中用于与内容提供者交互的接口。 为了能够访问用户的通讯录,还需要在AndroidManifest.xml文件中添加相应的权限声明: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` `READ_CONTACTS`权限允许读取联系人数据,而`READ_PHONE_STATE`则用于获取电话状态,包括电话号码。 总结来说,Android应用通过Intent和ContentResolver可以实现跳转到通讯录并获取用户选择的联系人的姓名和电话号码。需要注意的是,必须获得用户的权限许可才能访问这些敏感信息。在实际开发中,应确保遵守隐私政策,正确处理用户数据。















- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 单片机汽车醉酒禁驾系统设计方案.doc
- 《软件工程》单项选择题标准答案.doc
- 天然气管道工程项目管理分析.doc
- 智慧物联网解决方案.pptx
- 探索中学信息技术的Python之路.docx
- 智慧城市网格化综合管理平台探索.docx
- 广州市物联网技术应用与产业研究报告.docx
- 基于JSP的小型旅游网站方案设计书(含源文件).doc
- 人工智能·多元交互·情境美学.docx
- (源码)基于CC++的LUDAC项目.zip
- 基于计算机网络技术的数据库管理系统研究.docx
- 集团无线网络改造项目方案建议书.pdf
- 计算机操作系统期末考试题目及答案选择题.docx
- 计算机网络信息安全防护策略研究.docx
- 单片机水温控制器设计1.doc
- 项目教学法在职业学校计算机教学中的应用.docx



评论10