首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列

在 Android API 8 和 10 中,ContactsContract.Data.HAS_PHONE_NUMBER 类没有这样的列。但是,您可以使用其他方法来检查是否存在电话号码。

一种方法是使用 ContentResolver 查询电话号是否存在。以下是一个示例代码片段:

代码语言:kotlin
复制
val contentResolver = application.contentResolver

val hasPhoneNumber = contentResolver.query(
    ContactsContract.Data.CONTENT_URI,
    arrayOf(ContactsContract.Data.HAS_PHONE_NUMBER),
    ContactsContract.Data.CONTACT_ID + " = ?",
    arrayOf(id),
    null
)

如果该查询返回一个结果,则说明该联系人存在电话号码,并且该列在 ContactsContract.Data 中。

另一种方法是使用 Android 的原生电话号码 API 进行查询。您可以使用以下代码片段来查询联系人是否存在电话号码:

代码语言:kotlin
复制
val phoneNumbers = telephonyManager.phoneNumbers

if (phoneNumbers.count > 0) {
    // 获取第一个电话号码
    val phoneNumber = phoneNumbers[0]
    
    // 检查电话号码是否与联系人匹配
    if (phoneNumber.number == number) {
        // 是,则存在电话号码
        hasPhoneNumber = true
    }
}

如果该代码返回 true,则说明该联系人存在电话号码,并且该列在 ContactsContract.Data 中。

请注意,这些方法可能不适用于所有 Android 设备或 Android 版本。因此,您可能需要针对不同的设备或版本进行适当的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • einsum is all you needed

    没有什么办法让这些张量运算公式稍微显得对人类友好一些呢,能不能减少一些那种扭曲 \sum 求和符号呢? 小爱发现,求和导致维度收缩,因此求和符号操作指标总是只出现在公式一边。...C_{ij} = A_{ik} B_{kj} 这个公式表达含义如下: C这个张量第i行第j由 A 这个张量第i行第k和 B 这个张量第k行第j相乘,这样得到是一个三维张量 D , 其元素为...k.t()+b a = torch.bilinear(q,k,W,b) print("a.shape:",a.shape) #=====考虑batch维度==== Q = torch.randn(8,10...) #batch_size,query_features K = torch.randn(8,10) #batch_size,key_features W = torch.randn(5,10,10...a = torch.softmax(q@k.t()/d_k,-1) print("a.shape=",a.shape ) #====考虑batch维度==== Q = torch.randn(8,10

    1.9K40

    数据分析 ——— pandas数据结构(一)

    如果没有索引被传递,则默认为**np.arrange(n)** dtype: 设置数据类型 copy: 复制数据,默认为Flase 1)创建一个空序列 import numpy as np...DataFrame DataFrame是一个2维标签数据结构,它可以存在不同类型。你可以把它简单想成Excel表格或SQL Table,或者是包含字典类型Series。...columns: 对于标签,可选默认语法是 - np.arrange(n)。这只有在没有通过索引情况下才是正确。...如果索引被传递,那么索引长度应该等于数组长度。 如果没有索引被传递,那么默认情况下,索引将是range(n),其中 n 是数组长度。...# 从ndarrays/ListDict创建一个DataFrame data1 = {'Name':['Al','Bl','Cl'], 'Age':[9, 8,10]} df1 = pd.DataFrame

    2.1K20

    leetcode-48-旋转图像

    题目描述: 给定一个 n × n 二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入二维矩阵。请不要使用另一个矩阵来旋转图像。...原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10...关于程序处理技巧,笔者最开始想是,把第一行映射到第四,把第二行映射到第三……这样做法,但是仔细一想,这样处理未免太过麻烦。...我们也许可以用简单直接一点方法来做,把matrix看成一个洋葱,第一次旋转最外层,接着旋转第二层,这样子我们每次旋转时候只需要存储两个变量。 而且这种方法看起来对于人类更加友好,便于设计程序。...//比如四行四矩阵,这个循环要执行两次 {                //每次执行一次循环,都会更新四个元素值 temp1=matrix

    54530

    LeetCode-56-合并区间

    # LeetCode-56-合并区间 给出一个区间集合,请合并所有重叠区间。...示例1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6...# 解题思路 方法1、排序+双指针: 虽然示例中没有给出需要排序案例,但需要考虑数组不是按照首位数组顺序排列情况,这样会让区间难以判断,所以先做一个排序。...之后初始化双指针,指向第一个区间start和end 进入for循环判断,判断下一个区间首位是否大于上个区间末尾 如果大于,则说明区间分离,加入新区间{start,end},更新start 当下一个区间不大于...end,即<=end时候,区间均要进行合并,此时区间为上一个区间start,到当前区间和下一个区间end最大值,所以end = Math.max(end,intervals[i][1]) 由于开始

    15210

    插入区间

    intervals = [[1,3],[6,9]], newInterval = [2,5] 输出:[[1,5],[6,9]] 示例 2: 输入:intervals = [[1,2],[3,5],[6,7],[8,10...],[12,16]], newInterval = [4,8] 输出:[[1,2],[3,10],[12,16]] 解释:这是因为新区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。...互不重叠前提下,当我们需要插入一个新区间 时,我们只需要: 找出所有与区间 重叠区间集合 ; 将 中所有区间连带上区间 合并成一个大区间; 最终答案即为不与 重叠区间以及合并后大区间。...这样正确性在于,给定区间集合中任意两个区间都是没有交集,因此所有需要合并区间,就是所有与区间 重叠区间。...特别地,如果不存在这样区间,我们需要在遍历结束后,将 加入答案。

    16121

    HanLP-最短路径分词

    若赋给相应边长一个权值(该权值可以是常数,也可以是所构成属性值),然后根据该切分图,在起点到终点所有路径中,求出长度值(包括权值)为最短一条路径,这条路径上包含词就是该句子切分结果。...为进一步提高切分精度,在词典中增加词属性值,即给每个词也给权重。这样每个词在汉字串中权重不同(即构成有向图边不为等长)。最简单权重可以用词频表示,高频词权重大,低频词权重小。...例子:他说的确实在理 图1.JPG 遍历计算过程和回溯分词过程 图2.JPG (1) node与to node词语为粗分词网中所有的词,to列为在node列为词word_node情况下...可以从待计算值所在行node读取出word词,在to中以待计算值所在行开始向上查找word,找到word所在行后(以首次遇到词为准),begin2to_w所对应值就是待计算值。...图4.jpg 可以看表中(7,9),(8,10),(11,13),(12,14),(15,16),(17,18)成对行来验证该公式,其中只有(17.18)行满足了第3个式子。

    82230

    A019-布局之GridLayout

    GridLayout 网格布局,是Android4.0之后API才提供,算是一个相对新布局容器,它用法也很简单,类似LinearLayout可以指定方向,也可以指定控件占用多少行或空间。...这里我做了一个登录一个布局,如果不使用GridLayout来进行布局,可能会有多个布局嵌套才能实现这样布局,相对比较麻烦,使用了GridLayout我们可以更加灵活去控制对齐;网格视图针对行和进行分割为一个个单元格...android:columnCount=”4” 表示4 android:rowCount=”4” 表示4行 android:layout_columnSpan=”3” 表示占用3空间大小 android...:layout_rowSpan=”3” 表示占用3行空间大小 android:layout_gravity 可用用来设置控件对齐方式 总结 前面几篇博客加上本篇博客已经介绍完了Android布局容器...相信大家学习完这几节课程,对Android布局容器已经有了一些了解,每一个控件都不能独立于容器存在,布局容器之后我们接下来就会继续学习控件使用,通过模块化来学习如何去搭建用户界面,这样才会让大家更加接地气去感受一个

    45930

    android开发之使用SQLite数据库存储

    因此,Android 提供了一些新 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧版本号和一个新版本号,这样你就可以清楚如何把一个数据库从旧模型转变到新模型。...创建表和索引 为了创建表和索引,需要调用 SQLiteDatabase execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。...,表有一个列名为 _id,并且是主键,这值是会自动增长整数(例如,当你插入一行时,SQLite 会给这自动赋值),另外还有两:title( 字符 ) 和 value( 浮点数 )。...Raw Queries 正如 API 名字,rawQuery() 是最简单解决方法。通过这个方法你就可以调用 SQL SELECT 语句。

    2.6K20

    GridLayout 使用总结「建议收藏」

    ,默认值 android:columnOrderPreserved 使边界显示顺序和索引顺序相同,默认是true android:rowOrderPreserved 使行边界显示顺序和行索引顺序相同...,默认是true android:useDefaultMargins 没有指定视图布局参数时使用默认边距,默认值是false item属性 属性 作用 android:layout_column...指定该单元格占据行数 android:layout_gravity 指定该单元格在容器中位置 android:layout_columnWeight (API21加入)权重 android:layout_rowWeight...单独设置app:layout_columnWeight时,这一所有item都设置为这个属性,才能达到预期效果,否则这一中设置了该属性item,都会被隐藏,显示不出来 单独设置app:layout_rowWeight...weight方法,但是传入参数时,没有加上f,就调用了第一个方法,搞了半天才发现 所以,如果调用是第二个方法,一定要注意float参数表示方法,加个f,如:GridLayout.spec(0,1f

    1.9K30

    开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

    在 iOS 开发中,开发者可以直接调用 SQLite C API,但是大家也仍然倾向于选择类似 FMDB 这样框架。...它支持 Kotlin Multiplatform,除了 Android、iOS 这样移动端平台,还通过 Kotlin/Native 直接支持 macOS、Linux 以及 Windows 等桌面端平台...至此, sqllin-driver 实现已经没有太多困难,剩余开发工作只需要通过封装来抹平两边差异,并提供合适 common API 即可。...以这样方式构建出 API 可以最大程度还原 SQL 语法与语序。...KCP 不仅使用门槛高,而且官方尚未正式发布(这意味着它没有文档且后续 API 可能会发生大破坏性变更),因此使用 KCP 仿造编写一个类似的功能也同样很难。

    1.7K40

    AndroidMatrix(矩阵)

    大家好,又见面了,我是你们朋友全栈君。 写在前面 看这篇笔记之前先看一下参考文章,这篇笔记没有系统讲述矩阵和代码东西,参考文章写也有错误地方,要辨证看。...矩阵乘法 比如有矩阵A和矩阵B,他们分别为: 可以看到A为2行3矩阵,B为3行2矩阵,矩阵乘法符合下面的规则: 只有A数和B行数相等,A和B才可以做乘法 A*B结果C是2行2矩阵...,行数等于A行数,数等于B数 结果矩阵C第一行第一数值为A第一行和B第一数字分别相乘后再相加。...,它看起来大概是下面这样: 在Android中,使用一个3×1矩阵来表示一个点: x,y分别代表x,y轴上坐标,而1代表屏幕在z轴上坐标为默认。...dy),通过看api介绍,如果原矩阵为M,那么pre表示是左乘,post表示右乘: preTranslate : M’ = M * T(dx, dy) // 左乘 postTranslate:

    1.7K10

    Android数据存储实现5大方式

    因此,Android 提供了一些新 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...创建表和索引 为了创建表和索引,需要调用 SQLiteDatabase execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。...中使用 SQLite 数据库管理工具 在其他数据库上作开发,一般都使用工具来检查和处理数据库内容,而不是仅仅使用数据库 API。...那这个时候有读者就会提出问题,难道两个程序之间就没有办法对于数据进行交换?Android这么优秀系统不会让这种情况发生。解决这个问题主要靠ContentProvider。...如果你正在使用Android数据库,则数据使用方式就和你以往所熟悉其他数据库一样。但是,你必须为其定义一个叫_id,它用来表示每条记录唯一性。 5.

    6.7K90

    LeetCode中级算法-排序和搜索(2)

    [输入1] intervals = [[1,3],[2,6],[8,10],[15,18]] [返回1] [[1,6],[8,10],[15,18]] [输入2] intervals = [[1,4]...main import ( "fmt" "sort" ) func main() { input := [][]int {{1,3},{2,6},{8,10},{15,18}} result...target之间关系,确定mid向左定界,还是想有定界,直到mid指向元素等于target,则找到了target下标,否则没有该元素。...[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20 [返回2] false [解法1] 每行进行二分查找, 遍历整个二维矩阵,这样时间复杂度...,直到找到和target相同元素,这种算法时间复杂度是O(m + n),但是需要注意是,需要保证在遍历时候两个方向升序、降序方式是相反这样可以不考虑回退,即从左下角或者右上角开始向对向方向遍历

    26810
    领券