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.
781 0
|
Android开发 索引
android联系人app<一>
android通信录想必大家都不会陌生,有系统自带的联系人,也有比如qq通信录,百度通讯录,,来电通,go联系人等。每种大家可能都有有偏好喜爱,但是这里我个人推荐大家使用qq通信录、百度通讯录以及来电通。
1117 0
|
Android开发 索引
android联系人app<一>
android通信录想必大家都不会陌生,有系统自带的联系人,也有比如qq通信录,百度通讯录,,来电通,go联系人等。每种大家可能都有有偏好喜爱,但是这里我个人推荐大家使用qq通信录、百度通讯录以及来电通。
1289 0
|
8天前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
35 0
|
2月前
|
人工智能 文字识别 小程序
旅游社用什么工具收报名 + 资料?不开发 App 也能自动收集信息
本文探讨了旅游行业中报名信息收集的常见痛点及解决方案,重点介绍了二维码表单工具在提升信息收集效率、简化操作流程方面的优势。通过对比多种工具,分析其适用场景与实际应用逻辑,为一线旅游从业者提供高效、低成本的执行参考。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
IDE 开发工具 开发者
使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件
# 使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件 #鸿蒙开发工具 #DevEco Studio
312 1
|
3月前
|
人工智能 小程序 JavaScript
【一步步开发AI运动APP】十、微调优化内置运动分析器,灵活适配不同的应用场景
本文介绍了如何通过【一步步开发AI运动APP】系列博文,利用`ISportOptimizer`对内置运动分析器进行微调优化。相比小程序,APP框架(如uni-app)因技术差异,无法直接修改运动分析器参数,因此提供了统一的优化机制。开发者可通过`ISportOptimizer`获取和更新检测规则、动作样本等,灵活适应不同场景需求,如全民运动赛事的宽松模式或学生体测的严格模式。文中还提供了示例代码,展示如何对具体运动项目(如仰卧起坐)进行优化。需要注意的是,微调优化适用于标准动作的小范围调整,若动作变化过大(如花式跳绳),可期待后续自定义扩展功能。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:银行App
仓颉语言银行App项目分享,页面布局采用List容器,实现沉浸式体验与模块化设计。顶部资产模块结合Stack与Row布局,背景图与内容分离,代码清晰易懂;功能按钮部分通过负边距实现上移效果,圆角仅保留顶部;热门推荐使用header组件,结构更规范。整体代码风格与ArkTS相似,但细节更灵活,适合金融类应用开发。

热门文章

最新文章