Android获取手机通讯录、sim卡联系人及调用拨号界面方法
在Android平台上,获取手机通讯录和SIM卡联系人,以及调用拨号界面是常见的功能需求,这通常涉及到用户信息的读取和系统的交互。以下将详细解释如何实现这些功能。 要获取手机通讯录的联系人信息,我们需要访问Android的Content Provider,这是一个用于在应用程序之间共享数据的接口。在Android中,`ContactsContract`类提供了对系统通讯录的访问。以下是如何获取手机通讯录的示例代码: ```java private void getPhoneContacts() { ContentResolver resolver = this.getContentResolver(); // 获取手机联系人 Cursor phoneCursor = resolver.query( Phone.CONTENT_URI, new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER}, Phone.DISPLAY_NAME + "=?" + " AND " + Phone.TYPE + "='" + Phone.TYPE_MOBILE + "'", new String[]{name}, null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { String number = phoneCursor.getString(2); // 当手机号码为空或为空字段时跳过 if (TextUtils.isEmpty(number)) continue; String username = phoneCursor.getString(1); mContactsName.add(username); mContactsNumber.add(number); } phoneCursor.close(); } } ``` 这段代码中,我们使用`ContentResolver`查询`Phone.CONTENT_URI`,这个URI代表了所有电话记录。查询参数包括联系人的ID、显示名和电话号码,我们通过`Phone.TYPE_MOBILE`筛选出仅包含手机号码的联系人。 接下来,获取SIM卡联系人的过程与获取手机通讯录类似,只是需要查询不同的URI。对于SIM卡联系人,我们可以使用`content://icc/adn`这个URI,如下所示: ```java private void getSIMContacts() { ContentResolver resolver = mContext.getContentResolver(); // 获取SIM卡联系人 Uri uri = Uri.parse("content://icc/adn"); Cursor phoneCursor = resolver.query( uri, new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER}, Phone.DISPLAY_NAME + "=?" + " AND " + Phone.TYPE + "='" + Phone.TYPE_MOBILE + "'", new String[]{name}, null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { String number = phoneCursor.getString(2); // 当手机号码为空或为空字段时跳过 if (TextUtils.isEmpty(number)) continue; String username = phoneCursor.getString(1); mSIMContactsName.add(username); mSIMContactsNumber.add(number); } phoneCursor.close(); } } ``` 注意,SIM卡联系人通常不包含联系人头像,因为SIM卡存储空间有限,只存储基本的联系人信息。 调用系统拨打电话的界面,我们可以使用`Intent`来启动拨号器应用,并传入电话号码。代码如下: ```java private void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); startActivity(intent); } ``` 这里创建了一个`ACTION_DIAL`的`Intent`,设置数据URI为电话号码,然后启动该`Intent`,这将会打开系统拨号界面并填入指定的电话号码。 在进行以上操作前,别忘了在`AndroidManifest.xml`文件中添加相应的权限声明: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> ``` `READ_CONTACTS`权限用于读取联系人,而`CALL_PHONE`权限则是用来拨打实际电话的。 总结来说,Android开发中获取手机通讯录和SIM卡联系人信息,以及调用拨号界面,主要是通过Content Resolver查询系统提供的Content Provider,同时需要正确配置权限。理解并熟练运用这些方法,可以帮助开发者构建更完善的通讯功能。
- 粉丝: 6
- 资源: 973
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip