对于某些已保存的联系人,CallLog.Calls.CACHED_NAME 始终返回 null

2023-12-19

我试图在我的应用程序中显示通话记录详细信息,但 CallLog.Calls.CACHED_NAME 对于某些联系人始终返回 null,即使它是已保存的带有姓名的联系人。内置通话记录正确显示这些联系人的姓名。

这是我的代码:

protected customAdapRecent doInBackground(Void... params) {

        ContentResolver resolver = context.getContentResolver();
        final String[] PROJECTION = new String[] {
                                               //     CallLog.Calls.CACHED_LOOKUP_URI,
                                                    CallLog.Calls.NUMBER,
                                                    CallLog.Calls.CACHED_NAME,
                                                    CallLog.Calls.TYPE,
                                                    CallLog.Calls.DATE,
                                                    CallLog.Calls.DURATION
                                                };

        Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, PROJECTION, null, null, CallLog.Calls.DATE + " DESC");
        if(cursor.getCount() > 0)
        {
            int iNumber = cursor.getColumnIndex(CallLog.Calls.NUMBER);
            int iName = cursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
            int iType = cursor.getColumnIndex(CallLog.Calls.TYPE);
            int iDate = cursor.getColumnIndex(CallLog.Calls.DATE);
            int iDuration = cursor.getColumnIndex(CallLog.Calls.DURATION);

            DateFormat datePattern = DateFormat.getDateInstance(DateFormat.FULL);

            String number;
            String name;
            String type;
            String date;
            String duration;
            String contactId;
            String callIs = "None";
            String prevDate = "";
            int callType;


            while (cursor.moveToNext())
            {

                if(cursor.getString(iName) == null)
                    Log.e("DEBUG: ", "Position: " + cursor.getPosition());

                number = cursor.getString(iNumber);
                name = cursor.getString(iName);
                type = cursor.getString(iType);
                String tempdate = cursor.getString(iDate);
                Long tempDate = Long.parseLong(tempdate);
                date = datePattern.format(tempDate);

                if(prevDate.equalsIgnoreCase(date))
                {
                    prevDate = date;
                    date = "";
                }
                else
                    prevDate = date;
                //date = new Date(Long.valueOf(strdate));
                duration = cursor.getString(iDuration);
                callType = Integer.parseInt(type);
                switch (callType)
                {
                    case CallLog.Calls.OUTGOING_TYPE:
                        callIs = "OUT";
                        recentRow newRowO = new recentRow(number, name, date, duration, callIs);
                        listItem_recentOut.add(newRowO);
                        break;

                    case CallLog.Calls.INCOMING_TYPE:
                        callIs = "IN";
                        recentRow newRowI = new recentRow(number, name, date, duration, callIs);
                        listItem_recentIn.add(newRowI);
                        break;

                    case CallLog.Calls.MISSED_TYPE:
                        callIs = "MISS";
                        recentRow newRowM = new recentRow(number, name, date, duration, callIs);
                        listItem_recentMiss.add(newRowM);
                        break;

                }

                recentRow newRow = new recentRow(number, name, date, duration, callIs);
                //recentRow newRow = new recentRow(number, name, callIs);
                listItem_recentAll.add(newRow);
            }
            cursor.close();
            cAdapRecent = new customAdapRecent(context, listItem_recentAll);
        }

        return cAdapRecent;
    }

Log.e() 中给出的 Debug 语句也会打印。

我在查找过程中做错了什么吗?请。建议一种方法,因为我真的因此被阻止了!

提前致谢...


我也遇到了这种奇怪的行为,并发现有时您无法立即获得联系人的姓名,即使您可以从CallLog.Calls。我注意到,自该调用后大约一小时左右,您可以获取姓名以及所有其他信息CallLog.Calls数据。很奇怪。如果您在通话后需要立即刷新,您可以从以下位置获取号码的姓名ContactsContract像这样:

 fun getNameForNumber(context: Context, number: String): String? {

        var res: String? = null
        try {
            val resolver = context.contentResolver
            val uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number))
            val c = resolver.query(uri, arrayOf(ContactsContract.PhoneLookup.DISPLAY_NAME), null, null, null)

            if (c != null) {
                if (c.moveToFirst()) {
                    res = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
                }
                c.close()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

        return res
    }

奇怪的是,当你从ContactsContract以您的方式通过 CallLog.Calls.CACHED_NAME 获取名称,效果非常好。

这也是@PeterB 和@shyam002 的答案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于某些已保存的联系人,CallLog.Calls.CACHED_NAME 始终返回 null 的相关文章

  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • 如何模糊视图

    I have a view having different colors I need to blur the background of that view for example There is LinearLayout in wh
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • Firebase API 初始化失败,java.lang.reflect.InitationTargetException

    我在我的应用程序中使用 firebase 身份验证 数据库和存储服务 之前运行良好 我已经添加了 firebase 云消息传递设置 如文档中所述 但应用程序在运行时崩溃了 我调查了这个问题大约 4 个小时并尝试了不同的解决方案 就像保持所有
  • 在 Android 运行时更改和应用主题 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Android 运行时更改当前主题 https stackoverflow com questions 2482848 how to change current theme at runti
  • Gradle创建多项目Jar

    因此 从 Gradle 和 Android Studio 诞生之初起 我就一直在使用它们 然而 我发现自己用头撞墙的次数有时远远超过了它的价值 我花了一天半的时间试图解决我目前的困境 在我工作的地方 我们使用很多共享库项目 这意味着与 Gr
  • Android wifi的信号强度[重复]

    这个问题在这里已经有答案了 可能的重复 Android 如何监控WiFi信号强度 https stackoverflow com questions 1206891 android how to monitor wifi signal st
  • Tomcat下的Spring CXF Soap Web服务:找不到服务

    我正在尝试使用 CXF 和 Spring 设置一个在 Tomcat 上运行的简单 CXF Web 服务 我有一个 Web 应用程序初始化程序来引导 CXF servlet public class WebAppInitializer ext
  • 是否可以用 C# 为 Android 编写应用程序?

    我们都知道Android运行Dalvik VM程序 通常开发人员用 Java 编写程序并将其编译为 Dalvik 字节码 我想知道是否有可能创建一个可以接受 C 代码并将其编译为 Dalvik 字节码的编译器 嗯 这是一种选择 或者您可以在
  • Android onclicklistener 在第一次点击时不起作用

    我有一个带有默认文本的 EditText 现在 当用户单击该 EditText 时 默认文本应该更改为某些内容 我所拥有的是 我单击 EditText 光标出现在默认文本之后 没有任何反应 当我再次单击时 onClickListener 就
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • Java 9:AES-GCM 性能

    我进行了一个简单的测试来测量AES GCM https en wikipedia org wiki Galois Counter Mode表现在Java 9 通过在循环中加密字节缓冲区 结果有些令人困惑 本机 硬件 加速似乎有效 但并非总是
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • Jetpack 中的波浪框组成

    有没有办法用Canvas制作一个顶部有波浪形的盒子 我想知道这个效果是否可以直接用Canvas来实现 不需要有滚动动画 不太清楚你为什么在谈论Canvas 要裁剪这样的视图 您可以使用自定义Shape并将其应用到您的视图中Modifier
  • Bipush 在 JVM 中如何工作?

    我知道 iload 接受整数 1 到 5 但是如何使用 bipush 指令扩展到更高的数字 特定整数如何与字节码一起存储 有几种不同的指令可用于推送整数常量 最小的是iconst 指令 这些只是一个字节 因为该值是在操作码本身中编码的 ic
  • 加载 highchart 时 Android 错误膨胀类

    我正在尝试加载highcharts via Dialog 下面是我的代码 Gradle implementation com highsoft highcharts highcharts 9 0 1 XML
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • com.fasterxml.jackson.databind.JsonMappingException:无法反序列化 org.springframework.data.domain.Sort 的实例 START_ARRAY 令牌

    我的 objectMapper 正在获取类型的值Page
  • Android PhoneGap 中的自定义字体

    我尝试为我的应用程序制作自定义字体 为此 我在 html 文件中编写了以下代码 在我的 HTML 正文中

随机推荐

  • 操作系统回调如何工作

    跟进问题 这个问题 https stackoverflow com questions 1223040 c timers in unix 如链接问题中所述 我们有一个 API 它使用事件外观来轮询 select 来处理用户定义的回调 我有一
  • 在 BigQuery 中获取不超过一小时的数据

    尝试使用以下语句 SELECT FROM data example WHERE TIMESTAMP timeCollected lt DATE ADD USEC TO TIMESTAMP NOW 60 MINUTE 从我的 bigquery
  • 使用 Storyboard Segues 关闭 Popover 视图

    我一直在谷歌搜索并在整个堆栈交换中搜索正确的答案 但我似乎找不到它 我所拥有的是通过弹出框 Segue 呈现的弹出框视图 当在弹出框视图内单击按钮时 我希望它被关闭并显示 UIAlert 这是迄今为止我从其他答案中收集的代码 但不起作用 v
  • 创建任务时无用的 Amazon ECS 错误消息

    使用ECS代理容器 https github com aws amazon ecs agent在 Ubuntu 实例上 我可以向我的集群注册代理 我还在该集群和任务定义中创建了一项服务 当我尝试将任务添加到集群时 我收到无用的错误消息 Ru
  • 在哪里初始化我的应用程序的基类 Swift

    我有一个名为Home这是我的应用程序的父类 现在 我想在某个地方初始化这个类 以便我可以从任何我想要的地方访问类中的所有内容 该应用程序的起点是RootViewController 我应该在起点初始化应用程序吗 如果是 我应该如何做才能从应
  • PyCharm:找不到 Anaconda 安装

    在使用 PyCharm 之前 我在 Windows 10 上将 Anaconda 安装在 C ProgramData Anaconda3 中 现在 当我尝试使用 conda env 时 PyCharm 显示 未找到 Anaconda 安装
  • 如何访问或翻译矢量绘图中的文本

    我有一个习惯view它显示一个drawable并检测触摸 它有多个drawable图层 其中一些包含文本 例如 我已将每个 SVG 矢量图形转换为vector drawable并希望能够将文本设置为资源 以便我可以替换不同的翻译 上面 He
  • 创建自托管 Web API 还是使用 Asp.Net Core Web API?

    我有两个选择 如果我使用自行托管 Web ApiOWIN Katana我可以获得性能提升 但如上所述here https forums asp net t 1908235 aspx Self hosting or IIS hosted 我必
  • Rails 按创建日期对记录进行分组

    所以我有一个模型 我想检索记录并按created at字段的日期对它们进行分组 但created at是一个日期时间字段 我只对日期部分感兴趣 所以我正在寻找类似二维数组的东西 第一层是一个以日期字符串为键的哈希 第二层是带有记录的数组 我
  • 我如何子类化 threading.Event?

    在 Python 2 7 5 中 from threading import Event class State Event def init self name super Event self init self name name d
  • Asp.Net MVC 4 中的自定义 URL 路由

    我怎样才能像这个网址一样 http www domain com friend content title http www domain com friendly content title 在 Asp Net MVC 4 中 注意 该参
  • 如何设置GAE环境特定的环境变量?

    我在 Go 中有一个 GAE 应用程序 使用martini https github com go martini martini 我需要能够设置MARTINI ENV环境变量告诉 martini 它应该使用生产设置进行初始化 根据Pyth
  • 仅包含 ASCII 字符的 UNICODE 字符串是否始终等于 ASCII 字符串?

    我注意到以下几点 gt gt gt u abc abc True gt gt gt abc u abc True 这总是正确的还是可能取决于系统区域设置 在 python 3 中字符串似乎是 unicode 例如这个问题 https sta
  • 如何删除 openlayer 中的特定标记

    这是来自 capdragon 更新的新代码 但现在它不会创建标记 我现在不知道如何解决这个问题 我认为代码片段是解决我之前识别标记问题的一种非常聪明的方法 而且它可能是我现在缺少的一个非常小的东西 任何再次帮助将不胜感激
  • 如何创建守护线程?

    java程序员可以手动创建守护线程吗 如何 java lang Thread setDaemon 布尔值 http java sun com javase 6 docs api java lang Thread html setDaemon
  • Boost.Python 和 Boost.Function

    我想包一个boost function类成员 以便可以按以下方式使用它 using namespace boost using namespace boost python struct gui button t function
  • 强制 C++ 函数的用户承认数值常量参数的语义的最佳方法是什么?

    我想编写函数接口来强制用户承认内置常量的语义 例如 我想采取 void rotate float angle Rotate the world by an angle in radians 并将其更改为 void rotate Radian
  • 允许函数指针类型的模板参数接受任何返回类型的函数

    当函数的返回值未被实际使用时 是否有一种方法允许函数指针类型的模板参数接受任何 而不是特定 返回类型的函数 这是一个 MCVE 来说明我的意思 int returnInt int return 0 void returnVoid int t
  • 恢复 scipy.optimize 中的优化?

    scipy optimize 提供了许多不同的方法用于多元系统的局部和全局优化 然而 我需要一个很长的优化运行 可能会被中断 在某些情况下 我可能想故意中断它 有什么办法可以重新启动吗 嗯 有什么办法吗 我的意思是 显然可以提供最后一组最优
  • 对于某些已保存的联系人,CallLog.Calls.CACHED_NAME 始终返回 null

    我试图在我的应用程序中显示通话记录详细信息 但 CallLog Calls CACHED NAME 对于某些联系人始终返回 null 即使它是已保存的带有姓名的联系人 内置通话记录正确显示这些联系人的姓名 这是我的代码 protected