联系人的开发
来源:互联网 发布:淘宝外卖如何代付 编辑:程序博客网 时间:2024/06/07 18:24
转载:http://1002878825-qq-com.iteye.com/blog/1546326
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来
contacts.db后 发面里面有一堆表,我们主要涉及到4张表,contacts 表 ,data表 ,phone_look_up表 ,raw_contact表 。
1.contacts 表
_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称
photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空
times_contacted:通话记录的次数
last_time_contacted: 最后的通话时间
lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来
contacts.db后 发面里面有一堆表,我们主要涉及到4张表,contacts 表 ,data表 ,phone_look_up表 ,raw_contact表 。
1.contacts 表
_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称
photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空
times_contacted:通话记录的次数
last_time_contacted: 最后的通话时间
lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup
3.phone_look_up表
data_id : 通过data_id可以找到 datat表中相对的数据。
raw_contact_id : 通过raw_contact_id 可以找到 raw_contact_表中相对的数据。
normalized_number: 这个字段就比较有意思了,它是将每个电话号码逆序排列。
4.raw_contact表
version :版本号,用于监听变化
deleted :删除标志, 0为默认 1 表示这行数据已经删除
display_name : 联系人名称
last_time_contacts : 最后联系的时间 。
contacts.db后 发面里面有一堆表,我们主要涉及到4张表,contacts 表 ,data表 ,phone_look_up表 ,raw_contact表 。
1.contacts 表
_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称
photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空
times_contacted:通话记录的次数
last_time_contacted: 最后的通话时间
lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来
contacts.db后 发面里面有一堆表,我们主要涉及到4张表,contacts 表 ,data表 ,phone_look_up表 ,raw_contact表 。
1.contacts 表
_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称
photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空
times_contacted:通话记录的次数
last_time_contacted: 最后的通话时间
lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup
3.phone_look_up表
data_id : 通过data_id可以找到 datat表中相对的数据。
raw_contact_id : 通过raw_contact_id 可以找到 raw_contact_表中相对的数据。
normalized_number: 这个字段就比较有意思了,它是将每个电话号码逆序排列。
4.raw_contact表
version :版本号,用于监听变化
deleted :删除标志, 0为默认 1 表示这行数据已经删除
display_name : 联系人名称
last_time_contacts : 最后联系的时间 。
写道
content://com.android.contacts是联系人的路径,
content://com.android.contacts/contacts(所以联系人,要操作contacts这张表)
content://com.android.contacts/contacts/id 表示操作contact表中某一条id的记录
content://com.android.contacts/contacts/id/data 表示操作contact表中某一条id的记录中的data数据(data也是一张表)
content://com.android.contacts/contacts(所以联系人,要操作contacts这张表)
content://com.android.contacts/contacts/id 表示操作contact表中某一条id的记录
content://com.android.contacts/contacts/id/data 表示操作contact表中某一条id的记录中的data数据(data也是一张表)
写道
如果遇到这个错误:
Attempted to access a cursor
after it has been closed.
Application did not close the cursor or database
object that was opened here 。
原因是:
You should not be getting that message if you close the Cursor in onStop() or onDestroy().
Please try that again. Or, call startManagingCursor() after you get the Cursor from your query,
and Android will close the Cursor on its own.
也就说,你用了 startManagingCursor(c)或者
managedQuery(uri, null, null, null, null);
这个2个方法里面在操作数据库的时候,当获取完数据了,会自动关闭游标,那么你在不知道的情况下你再次关闭游标,所以造成崩溃。
解决方案:
采用getContentResolver;
比如:
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);
Attempted to access a cursor
after it has been closed.
Application did not close the cursor or database
object that was opened here 。
原因是:
You should not be getting that message if you close the Cursor in onStop() or onDestroy().
Please try that again. Or, call startManagingCursor() after you get the Cursor from your query,
and Android will close the Cursor on its own.
也就说,你用了 startManagingCursor(c)或者
managedQuery(uri, null, null, null, null);
这个2个方法里面在操作数据库的时候,当获取完数据了,会自动关闭游标,那么你在不知道的情况下你再次关闭游标,所以造成崩溃。
解决方案:
采用getContentResolver;
比如:
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);
- /**
- * 查询所有的联系人
- */
- private void testContact() {
- //com.android.contacts是联系人的路径,com.android.contacts/contacts(所以联系人)
- try {
- Uri uri = Uri.parse("content://com.android.contacts/contacts");//联系人uri
- ContentResolver resolver = getContentResolver();
- Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);
- while(cursor.moveToNext()){
- //根据列索引
- int contactId = cursor.getInt(cursor.getColumnIndex("_id"));
- System.out.println("id === " + contactId);
- getContactByContactID(contactId);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 根据contact的id获取联系人的信息
- * @param contactId
- */
- private void getContactByContactID(int contactId) {
- ContentResolver phoneResolver = getContentResolver();
- Uri phoneUri = Uri.parse("content://com.android.contacts/contacts/"+contactId+"/data");//根据联系人的id来获取联系人的信息
- Cursor phoneCursor = phoneResolver.query(phoneUri, null, null, null, null);
- while(phoneCursor.moveToNext()){
- //data中的表,data1字段代表:姓+名,邮件,电话
- String data = phoneCursor.getString(phoneCursor.getColumnIndex("data1"));
- // System.out.println("data ====== " + data);
- //data2字段表示:名,邮件,电话的类型
- // String data2 = phoneCursor.getString(phoneCursor.getColumnIndex("data2"));
- // System.out.println("data2====== " + data2);
- String mimeId = phoneCursor.getString(phoneCursor.getColumnIndex("mimetype"));
- // System.out.println("mimeId====== " + mimeId);
- if(mimeId.equals("vnd.android.cursor.item/phone_v2")){//电话
- System.out.println("data ===phone=== " + data);//电话有多个
- }else if(mimeId.equals("vnd.android.cursor.item/email_v2")){//邮件
- System.out.println("data ===email=== " + data);
- }else if(mimeId.equals("vnd.android.cursor.item/name")){//名称
- System.out.println("data ===name=== " + data);
- }
- }
- }
- 联系人的开发
- 通过联系人号码获取联系人的姓名(android开发)
- Android 联系人开发- 查询联系人
- Android 联系人开发- 保存联系人
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android 联系人开发
- iPhone开发之获得通讯录中联系人的所有属性
- iPhone开发之获得通讯录中联系人的所有属性
- android开发笔记之联系人百家姓功能的实现
- iPhone开发之获得通讯录中联系人的所有属性
- Android 开发 ContentProvider 获取歌曲列表和联系人的例子
- Android 开发 ContentProvider 获取歌曲列表和联系人的例子
- Joomla! 2.5 模块类型总览
- 2012几大传统编程语言就业趋势分析
- startActivityForResult using the tab Activity 的解决办法
- 2012年 Web 编程语言工作趋势
- Android之Fragment使用简介
- 联系人的开发
- FluorineFx:实现Flex与ASP.NET的协同开发之组件库
- 探索推荐引擎内部的秘密:深入推荐引擎相关算法 - 协同过滤
- JAVASCRIPT MVC架构之旅
- Linux中crontab-定时任务命令
- 六款常用的linux C/C++ IDE
- 特殊数据类型成员变量的初始化
- 魔乐科技MLDN_android开发实战经典_李兴华_视频下载汇总
- 直接插入排序