Android 手机卫士--获取联系人信息并显示与回显
获取ContentResolver对象。 启动查询,获取 对每个 根据 将解析后的数据添加到联系人列表中。 在ListView的ItemClickListener中获取点击条目的数据。 提取电话号码,作为结果返回。 在结果页面中显示电话号码,并存储到SharedPreferences中。
发布日期:2025-06-20 09:58:41
浏览次数:10
分类:精选文章
本文共 4780 字,大约阅读时间需要 15 分钟。
读取系统联系人并实现联系人信息回显
在本文中,详细介绍了如何在Android应用中读取系统联系人信息,并实现联系人信息的回显功能。以下将分为两大部分进行阐述:第一部分介绍如何读取系统联系人信息,第二部分介绍如何实现联系人信息的回显。
一、读取系统联系人信息
在Android系统中,联系人信息是由系统提供的数据,通常存储在两个主要数据库表中:raw_contacts 和 data。通过使用ContentResolver和Cursor进行数据库查询,可以有效地读取联系人信息。
1. 内容解析器(ContentResolver)
ContentResolver是Android系统中用于与内容提供者进行交互的核心接口。它能够解析不同内容提供者的数据,返回适用于应用的数据格式。
2. 系统联系人数据库结构
-
raw_contacts表:contact_id:联系人唯一性标识符。
-
data表:raw_contact_id:外键,用于关联raw_contacts表。data1:存储联系人信息的字段,包含电话号码和联系人名称。mimetype_id:表示数据类型的引用。
-
mimetypes表:- 用于映射数据类型,例如电话号码对应的类型为
vnd.android.cursor.item/phone_v2,联系人名称对应的类型为vnd.android.cursor.item/name。
- 用于映射数据类型,例如电话号码对应的类型为
3. 数据库访问方式
通过ContentResolver进行查询,常用的URI包括:
content://com.android.contacts/raw_contactscontent://com.android.contacts/data
4. 实现步骤
raw_contacts表中的contact_id。contact_id,查询data表,获取data1和mimetype字段。mimetype类型,解析数据,填充到一个哈希表中。二、联系人信息回显
在用户点击联系人条目时,需要实现信息的回显。例如,双击第一个条目后,电话号码自动添加。
1. 实现方法
2. 代码实现
private ListView lv_contact;private List> contactList;private MyAdapter mAdapter;private Handler mHandler;private EditText et_phone_number;private Button bt_select_number;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact_list); initUI(); initData();}private void initUI() { lv_contact = (ListView) findViewById(R.id.lv_contact); lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { if (mAdapter != null) { HashMap hashMap = mAdapter.getItem(i); String phone = hashMap.get("phone"); Intent intent = new Intent(); intent.putExtra("phone", phone); setResult(0, intent); finish(); } } }); et_phone_number = (EditText) findViewById(R.id.et_phone_number); bt_select_number = (Button) findViewById(R.id.bt_select_number); bt_select_number.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getApplicationContext(), ContactListActivity.class); startActivityForResult(intent, 0); } });}private void initData() { new Thread() { @Override public void run() { ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query( Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null ); contactList.clear(); while (cursor.moveToNext()) { String id = cursor.getString(0); Cursor indexCursor = contentResolver.query( Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{id}, null ); HashMap hashMap = new HashMap<>(); while (indexCursor.moveToNext()) { String data = indexCursor.getString(0); String type = indexCursor.getString(1); if (type.equals("vnd.android.cursor.item/phone_v2")) { if (!TextUtils.isEmpty(data)) { hashMap.put("phone", data); } } else if (type.equals("vnd.android.cursor.item/name")) { if (!TextUtils.isEmpty(data)) { hashMap.put("name", data); } } } contactList.add(hashMap); indexCursor.close(); } cursor.close(); mHandler.sendEmptyMessage(0); } }.start();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { String phone = data.getStringExtra("phone"); phone = phone.replace("-", "").replace(" ", "").trim(); et_phone_number.setText(phone); SpUtil.putString(getApplicationContext(), ConstantValue.CONTACT_PHONE, phone); } super.onActivityResult(requestCode, resultCode, data);}
三、总结
通过以上方法,可以实现读取系统联系人信息并实现信息的回显。这种方法不仅满足了基本需求,还通过优化用户体验和数据存储,使得应用更具实用性。这篇文章详细介绍了实现过程中关键的步骤和细节,希望对开发者有所帮助。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2026年05月30日 11时46分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP 数据库连接池实现
2023-02-28
php 数组 区别,PHP中数组的区别
2023-02-28
PHP 数组怎么添加一个元素
2023-02-28
PHP 文件操作
2023-02-28
php 文字弹幕效果代码,HTML5文字弹幕效果
2023-02-28
php 时间日期函数,获取今天开始时间,结束时间
2023-02-28
php 标准规范
2023-02-28
PHP 浮点型精度运算相关问题
2023-02-28
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28
php 生成csv mac下乱码
2023-02-28
php 生成证书 签名及验签
2023-02-28
PHP 的标准输入与输出
2023-02-28
php 笔记 (早前的,很乱)
2023-02-28
PHP 第一天
2023-02-28
Redis使用量暴增,快速定位有哪些大key在作怪
2023-02-28
PHP 统计数据功能 有感
2023-02-28
SpringBoot处理JSON数据
2023-02-28
PHP 输入输出流合集
2023-02-28
php--防止sql注入的方法
2023-02-28