
Android平台上获取手机联系人的方法
下载需积分: 10 | 1.89MB |
更新于2025-08-26
| 123 浏览量 | 举报
收藏
根据提供的文件信息,我们可以确定知识主题集中在如何在Android平台上获取手机联系人信息,并与发送短信功能相结合。接下来我将详细阐述这一过程中的相关知识点。
### Android获取手机联系人知识点
1. **权限申请**: 在Android中,要获取手机联系人信息,首先需要在应用的Manifest文件中声明相应的权限。对于联系人信息,需要添加如下权限:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
```
自Android 6.0(API 级别 23)开始,对于敏感权限还需要在应用运行时向用户请求权限。
2. **联系人存储**: Android平台将联系人信息存储在系统的联系人数据库中,通常通过Content Provider访问。联系人信息包括但不限于姓名、电话号码、邮箱地址等。
3. **使用ContentResolver查询**: 通过ContentResolver类的query方法可以访问联系人数据。查询联系人数据通常使用ContactsContract类中定义的Uri,例如:
```java
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
```
4. **Cursor使用**: 在执行查询后,会返回一个Cursor对象,这是一个可以遍历查询结果的游标。通过Cursor可以逐条读取联系人数据。
```java
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// 处理获取到的联系人信息
}
cursor.close();
}
```
5. **异步处理**: 由于从Content Provider获取数据可能耗时,因此建议在后台线程中执行查询操作,以避免阻塞主线程。
6. **运行时权限请求**: 在Android 6.0以上版本,用户可以在运行时授予或拒绝权限。应用需要在执行敏感操作之前检查权限是否已被授予,并在未授权时请求用户授权。
```java
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
```
7. **权限回调处理**: 当应用请求权限后,系统会回调onRequestPermissionsResult方法。应用需要实现该方法来处理用户的选择。
```java
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予,可以读取联系人
} else {
// 权限被拒绝,禁止访问联系人数据
}
return;
}
}
}
```
### 发送短信功能知识点
1. **发送短信权限**: 向手机发送短信需要声明SEND_SMS权限,并在运行时获取用户授权。
```xml
<uses-permission android:name="android.permission.SEND_SMS"/>
```
2. **SmsManager API**: Android提供了SmsManager API用于发送短信,通过它可以在后台发送短信而不会阻塞主线程。
```java
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
```
3. **短信发送状态监听**: 发送短信时,可以注册一个PendingIntent来监听短信的发送状态。
```java
PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent("MySMSBroadcast"), 0);
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()){
case Activity.RESULT_OK:
// 短信发送成功
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
// 发送失败
break;
// 其他错误处理
}
}
}, pi);
```
4. **短信发送限制**: 需要注意的是,自Android 4.4 (API 级别 19)起,非系统应用无法在后台发送短信。这意味着发送短信的操作必须由用户直接发起,通常在用户界面的某个按钮点击事件中触发。
5. **处理用户界面**: 开发应用时,要考虑到用户体验,发送短信操作通常需要用户明确的动作。因此,UI设计应该清楚地指示发送短信的按钮,并在用户同意发送短信时提示。
### 结合联系人信息发送短信
结合上述知识点,实现一个功能,根据用户选择的联系人发送短信,需要经过以下步骤:
1. **请求读取联系人权限**: 在用户界面提供一个按钮,用户点击后请求读取联系人的权限。
2. **读取联系人**: 如果用户授权,应用通过Content Resolver读取联系人信息,并展示给用户选择。
3. **用户选择联系人**: 用户从列表中选择一个联系人,应用获取到联系人的电话号码。
4. **请求发送短信权限**: 用户点击发送短信按钮后,应用需要请求发送短信的权限。
5. **发送短信**: 获得权限后,使用SmsManager API发送短信,并注册PendingIntent来监听短信发送状态。
6. **异常和错误处理**: 在获取权限、读取联系人和发送短信的过程中,应用需要妥善处理各种异常和错误情况,如权限被拒绝、联系人信息不存在或短信发送失败等。
通过结合Android平台的联系人API和短信发送API,可以实现一个用户友好的联系人短信发送应用。需要注意的是,随着Android系统的更新,API及其使用方式可能发生变化,因此在实际开发中还需要参考最新的官方文档。
相关推荐

















Android应用开发
- 粉丝: 12
最新资源
- 适用于RedHat6.5的Mondo Rescue压缩包
- Java验证码生成库:Kaptcha与Jcaptche整合教程
- Resin Pro 3.1.8版本发布与特性介绍
- 深入探讨DLL内存加载技术及其应用
- 安卓屏幕亮度调节教程及seekbar示例
- 深入分析openssl-1.0.1u版本特点及应用
- Mallmold外贸建站系统5.0无毒开源版
- 全局过TP驱动保护检测技术分析
- Zemax2009安装教程及压缩包下载
- OrangeOs操作系统源代码及镜像文件发布
- Apache Tomcat 8.0.9版本Windows x64平台安装包发布
- 中兴U116+无线座机固件升级 支持联通移动SIM卡
- Spring框架定时任务实现及打包案例分享
- 动态天气预报原理及雨雪效果实现
- SQLyog10压缩包文件解压缩指南
- PIC24单片机Bootloader软件开发与应用
- Java龙果支付开源项目,功能强大,免费分享
- Spring4.3.2与Spring-Security4.1.3集成示例教程
- 纯C/C++实现的AES加密与解密示例程序
- CJ源代码的探索与应用
- 掌握HookD3D技术:在DirectX中实现文本绘制
- 深度解析最新版本eigen库3.2.10的特性与应用
- Office系列版本间完美兼容转化解决方案
- 掌握jquery-i18n-properties实现多语言网站