android联系人app<二>

简介: 首先接着上一篇,为什么谷歌设计联系人显示的时候姓名和电话不一起显示?    这里我们先到谷歌官方看联系人的介绍:      The Contacts Provider is an Android content provider component.

   首先接着上一篇,为什么谷歌设计联系人显示的时候姓名和电话不一起显示?

   这里我们先到谷歌官方看联系人的介绍:

     The Contacts Provider is an Android content provider component. It maintains three types of data about a person, each of which corresponds to a table offered by the provider, as illustrated in figurel.

    联系人数据是通过contentprovider来提供对外数据访问的。联系人内容提供者包含了联系人的三种类型数据,每一个 对应于内容提供者的一张表,关系如下图1所示:

The three tables are commonly referred to by the names of their contract classes. The classes define constants for content URIs, column names, and column values used by the tables:

    上面三张表通常被contact类名所引用,下面的这些表使用了一些类,而这些类定义了uris常量,列名以及列对应的值。

ContactsContract.Contacts  table
Rows representing different people, based on aggregations of raw contact rows.
ContactsContract.RawContacts  table
Rows containing a summary of a person's data, specific to a user account and type.
ContactsContract.Data  table
Rows containing the details for raw contact, such as email addresses or phone numbers.
主要就是这三张表了。
 
下面来看看contactprovider对外提供方问方式:  
1  public static final String AUTHORITY = "com.android.contacts";
2     /** A content:// style uri to the authority for the contacts provider */
3     public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
1 /**
2          * The content:// style URI for this table, which requests a directory
3          * of data rows matching the selection criteria.
4          */
5         public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "data");

那么访问这些数据是通过封装好的query,delete update,insert等方法,而这些方法具有局限性,

 
比如查询:
1 Cursor c = getContentResolver().query(RawContacts.CONTENT_URI,
2           new String[]{RawContacts._ID},
3           RawContacts.CONTACT_ID + "=?",
4           new String[]{String.valueOf(contactId)}, null);
5  

那么这里就有一个问题,就是一次只能查一张表,不能进行联合查询,因为使用resolver的默认方法中,它是将里面的内容填到sql语句对应的条件中,这种做法的好处是可以方便使用,其中封装对一些特殊字符的处理,但是问题是在相关的条件中没有联合查询如外连接 内连接这些,因此导致了在使用contentprovider访问系统数据就会有一次只能访问一个表的结果。

那么系统提供一个范例,那就是可以先查询Raw.contact这个表,显示联系人的姓名,当点击这个联系人再根据联系人_id,通过data这个表获得联系人的其他信息。因此在很多厂商通讯录app在设计上就规避了这种风险,显示的时候,先显示姓名,通过多一步的操作来完成联系人详细信息的展示。

那么假设如果产品经理要求你显示的时候就如同下面这样,该怎么办?

做还是不做??

要做的话 要怎么做?

 

 

  

  

目录
相关文章
|
Android开发
android联系人app<二>
首先接着上一篇,为什么谷歌设计联系人显示的时候姓名和电话不一起显示?    这里我们先到谷歌官方看联系人的介绍:      The Contacts Provider is an Android content provider component.
924 0
|
Android开发 索引
android联系人app<一>
android通信录想必大家都不会陌生,有系统自带的联系人,也有比如qq通信录,百度通讯录,,来电通,go联系人等。每种大家可能都有有偏好喜爱,但是这里我个人推荐大家使用qq通信录、百度通讯录以及来电通。
1255 0
|
Android开发 索引
android联系人app<一>
android通信录想必大家都不会陌生,有系统自带的联系人,也有比如qq通信录,百度通讯录,,来电通,go联系人等。每种大家可能都有有偏好喜爱,但是这里我个人推荐大家使用qq通信录、百度通讯录以及来电通。
1455 0
|
9月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1734 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1110 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1195 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
929 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
9月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
430 0
|
10月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1369 6
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5709 77

热门文章

最新文章