Android通过ContentResolver获取联系人信息实践
110 浏览量
更新于2024-08-30
1
收藏 154KB PDF 举报
"这篇资源主要介绍了如何在Android应用中利用ContentResolver访问并获取手机上的联系人信息。提供了两种方法:一种是直接获取所有联系人信息并显示在ListView中,另一种是通过按钮跳转到系统联系人界面,选择单个联系人进行显示。"
在Android开发中,ContentResolver是一个关键组件,它允许应用与系统的ContentProvider进行交互,ContentProvider则是Android系统中数据共享的桥梁。当需要获取手机联系人信息时,ContentResolver可以帮助我们完成这项任务。
第一种方法:直接获取所有手机联系人信息
1. 权限申请:首先,在AndroidManifest.xml文件中,必须声明读取联系人权限:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS" />
```
这个权限使得应用有权利访问用户的联系人数据。
2. 布局设计:在activity_main.xml文件中,定义一个ListView用于展示获取到的联系人信息:
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_25.MainActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lv_lxr" />
</ListView>
```
3. 代码实现:在MainActivity中,使用ContentResolver查询联系人数据,并填充到ListView:
```java
// 获取ContentResolver实例
ContentResolver resolver = getContentResolver();
// 查询联系人数据
Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
// 创建适配器并绑定数据到ListView
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, new ArrayList<>());
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
adapter.add(name + ": " + number);
}
ListView lvLxr = findViewById(R.id.lv_lxr);
lvLxr.setAdapter(adapter);
cursor.close();
```
第二种方法:通过按钮跳转获取单个联系人信息
1. 布局设计:在activity_main.xml中添加一个Button,点击后跳转到系统联系人选择界面。
2. 实现点击事件:在MainActivity中,监听Button的点击事件,启动系统联系人选择Intent,获取用户选择的联系人信息:
```java
Button btnSelect = findViewById(R.id.btn_select);
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, SELECT_CONTACT_REQUEST_CODE);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_CONTACT_REQUEST_CODE && resultCode == RESULT_OK) {
// 获取选中的联系人Uri
Uri contactUri = data.getData();
// 查询联系人详细信息
Cursor cursor = resolver.query(contactUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// 显示在ListView或其他控件中
// ...
}
cursor.close();
}
}
```
这两种方法都可以有效地获取到手机联系人信息。第一种方法适用于一次性展示所有联系人,而第二种方法则让用户能够选择单个联系人进行查看或操作。在实际应用中,开发者可以根据需求选择合适的方法。
1040 浏览量
333 浏览量
247 浏览量
230 浏览量
188 浏览量
2021-10-11 上传
137 浏览量
2022-04-05 上传
492 浏览量
weixin_38741317
- 粉丝: 3
- 资源: 905
最新资源
- python-3.4.4
- elemental-lowcode:元素低码开发平台
- Logger:记录工具
- SheCodes-WeatherApp:挑战3
- 阿宾贝夫前端测试
- 银灿IS917U盘PCB电路(原理图+PCB图)-其它其他资源
- registry-url:获取设置的npm注册表URL
- ST-link驱动.rar
- keen-gem-example:一个 Sinatra 应用程序,使用敏锐的 gem 异步发布事件
- 行业分类-设备装置-一种抗菌纸.zip
- Pearl-Hacks-2021:线框的htmlcss骨架
- a2s-rs:源代码查询的Rust实现
- DotFiles:我的Dotfiles <3
- Magisk Manager-20.1.zip
- ScheduleReboot:此实用程序用于在特定时间重新引导计算机,解决了在目标时间内处于睡眠模式的计算机在唤醒后实施重新引导的问题。
- Online-Face-Recognition-and-Authentication:Hsin-Rung Chou、Jia-Hong Lee、Yi-Ming Chan 和 Chu-Song Chen,“用于人脸识别和认证的数据特定自适应阈值”,IEEE 多媒体信息处理和检索国际会议,MIPR 2019