草庐IT

安卓联系人 : How does the lookup key works?

coder 2023-12-29 原文

在联系人 id 之上,Android 还获得了 LOOK_UP key 。由于联系人的 id 可以更改,您可以使用 LOOK_UP 键获取用户 uri。

public static Uri lookupContactUri(String lookup, Context context){
    ContentResolver contentResolver = context.getContentResolver();
    Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup);
    return ContactsContract.Contacts.lookupContact(contentResolver, lookupUri);
}

但是它是如何工作的呢? Contacts.lookupContact 的源代码并没有透露太多关于实际实现的信息。那么谁能解释一下他们是如何做到这一点的呢?

    /**
     * Computes a content URI (see {@link #CONTENT_URI}) given a lookup URI.
     * <p>
     * Returns null if the contact cannot be found.
     */
    public static Uri lookupContact(ContentResolver resolver, Uri lookupUri) {
        if (lookupUri == null) {
            return null;
        }

        Cursor c = resolver.query(lookupUri, new String[]{Contacts._ID}, null, null, null);
        if (c == null) {
            return null;
        }

        try {
            if (c.moveToFirst()) {
                long contactId = c.getLong(0);
                return ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
            }
        } finally {
            c.close();
        }
        return null;
    }

我测试的另一件事是使用 ContactsContract.AggregationExceptions 合并两个联系人然后挖掘联系 uri。两个 LOOK_UP 键都会产生与预期相同的联系人 uri。

他们是怎么做到的?

最佳答案

由于联系人 ID 会不时更改(例如,当联系人同步损坏并且需要从服务器重新同步联系人时),Android 引入了 LookupKeys 和 LookupUris 的概念。

LookupKey 是一个不透明 值,它可以在内部由Contacts 框架转换为一组字段:contact -idraw-contact-idsprimary-display-names

每当您尝试通过 LookupUri 访问联系人时,系统都会从 Uri 中提取 LookupKey,尝试访问 contact-id,并将其他字段(原始 ID、姓名等)与找到的联系人进行比较,如果它看起来是正确的联系人,则将其返回。 如果未找到 contact-id,或者系统检测到它是错误的联系人,则会对所有联系人进行查询以找到正确的联系人(使用存储在该键上的辅助字段)。

因此 LookupKey 充当返回 contact-id 或搜索它的快速方法,以防发生不良情况。

关于安卓联系人 : How does the lookup key works?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42336352/

有关安卓联系人 : How does the lookup key works?的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 如何在 ruby​​ on rails 中为 gmail 联系人创建访问 token - 2

    我正在使用Omniauth请求用户gmail凭据,因此我可以稍后请求用户friend/联系人。现在,我正在使用身份验证请求为我生成的访问token,在OmniauthCallbacksController中获取好友列表。像这样classUsers::OmniauthCallbacksController如何使用存储在数据库中的凭据创建新的访问token,以便从不同的Controller调用googleAPI? 最佳答案 从here获取您的client_id和client_secret|.这是一个粗略的脚本,可以很好地工作。根据您的需

  3. 光度学中的能量、通量、出度、照度、强度、亮度参数及其联系 - 2

    光度学中的能量、通量、出度、照度、强度、亮度参数及其联系光度学中评价光的强弱有两种方式,一种是将光作为电磁波,考察其辐射的能量;另一种是以人眼视觉体验来评价光的强弱。前者被称为辐射量,后者被称为光学量。辐射量包括辐射能、辐通量、辐出量、辐照度、辐强度、辐亮度参数,与之相对应,光学量包括光能量、光通量、光出量、光照度、光强度、光亮度参数。通过该文章的阅读,读者还能掌握光学中的几个单位:流明,勒克斯,坎德拉,尼特的意义以及他们之间的关系。辐射量1.辐射能光以电磁波形式发射、传输或接收的能量。单位:焦耳。2.辐通量单位时间发射、传输和接收的辐射能。单位:瓦特。3.辐出度单位面积的辐射源辐射出的辐通量

  4. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  5. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  6. ruby-on-rails - Rails 4 中的联系表格邮件程序 - 2

    我正在尝试在Rails4中构建一个联系表单,该表单包含姓名、电子邮件和正文并将其发送到我的电子邮件地址。单击“提交”后,该应用会正确重定向回“联系人”页面,但似乎未发送任何电子邮件。路线.rbmatch'/send_mail',to:'contact#send_mail',via:'post'contact_email.html.erbtrue%>true%>Youhavereceivedthefollowingemailfromcontact_controller.rbdefsend_mailname=params[:name]email=params[:email]body=par

  7. ruby - ruby、sinatra 和 haml 中的联系表单 - 2

    我是这三个方面的新手,我正在尝试为网站编写一个简单的联系表。我想出的代码如下,但我知道它存在一些基本问题(由于我对sinatra缺乏经验)。任何帮助完成这项工作的帮助将不胜感激,我似乎无法弄清楚/找到此类事情的文档。来自联系页面的haml代码:%form{:name=>"email",:id=>"email",:action=>"/contact",:method=>"post",:enctype=>"text/plain"}%fieldset%ol%li%label{:for=>"message[name]"}Name:%input{:type=>"text",:name=>"mes

  8. javascript - 如何使用 google-api-javascript-client 或 "Contacts API version 3.0"从 gmail 导入联系人? - 2

    我使用了2.0版的ContactsAPI和Gdata库来导入客户的gmail信息。此版本不再受支持,我尝试迁移到V3,但我发现Gdata不受v3支持,我花了几天时间尝试修改当前代码以使用javascript的“ContactsAPI3.0版”。GmailLogingoogle.load("gdata","2.s");google.setOnLoadCallback(function(){if(window.location.hash==""){if(!checkLogin()){logMeIn();}else{varfeedUrl="https://www.google.com/m8/

  9. javascript - Ember RESTAdapter 不联系服务器 - 2

    我正在编写我的第一个Ember应用程序,这一刻,我正在尝试从我的API(使用Rabl在Rails中制作)中使用JSON,但是RESTAdapater不工作。它甚至没有到达我的服务器!我得到了这段代码:app/adapters/application.jsimportDSfrom'ember-data';exportdefaultDS.RESTAdapter.extend({host:'localhost:3000',namespace:'api'});app/models/player.jsimportDSfrom'ember-data';exportdefaultDS.Model.e

  10. c# - 如何访问和修改 Windows 8 中的联系人? - 2

    我在Windows8中发现了一个新的联系人API:http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.contacts%28v=VS.85%29.aspx但是我无法找到如何列出所有联系人以及添加或删除联系人。有什么提示吗? 最佳答案 查看ContactPicker样本。你不能直接去修改联系人,你必须让用户先为你选择它们。这是通过pickSingleContactAsync()方法完成的。这会为您提供一个您可以查询或修改的Conta

随机推荐