如何从 Android 中选择唯一的联系人

2023-11-21

我想选择独特的联系方式从 Android 只显示有电话号码的联系人。我正在使用这个代码

ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                null, null, ContactsContract.Contacts.DISPLAY_NAME);
        // Find the ListView resource.
        mainListView = (ListView) findViewById(R.id.mainListView);

        // When item is tapped, toggle checked properties of CheckBox and
        // Planet.
        mainListView
                .setOnItemClickListener(new AdapterView.OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> parent, View item,
                            int position, long id)
                    {
                        ContactsList planet = listAdapter.getItem(position);
                        planet.toggleChecked();
                        PlanetViewHolder viewHolder = (PlanetViewHolder) item
                                .getTag();
                        viewHolder.getCheckBox().setChecked(planet.isChecked());
                    }
                });

        // Create and populate planets.
        planets = (ContactsList[]) getLastNonConfigurationInstance();
        // planets = new Planet[10];
        // planets.Add("asdf");
        ArrayList<ContactsList> planetList = new ArrayList<ContactsList>();
        String phoneNumber = null;
        String phoneType = null;

        count = cur.getCount();
        contacts = new ContactsList[count];

        if (planets == null)
        {
            if (cur.getCount() > 0)
            {
                planets = new ContactsList[cur.getCount()];
                int i = 0;
                //
                while (cur.moveToNext())
                {
                    String id = cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cur
                            .getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    if (Integer
                            .parseInt(cur.getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
                    {
                        // Query phone here. Covered next
                        Cursor pCur = cr
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = ?", new String[]
                                        { id }, null);

                        // WHILE WE HAVE CURSOR GET THE PHONE NUMERS
                        while (pCur.moveToNext())
                        {
                            // Do something with phones
                            phoneNumber = pCur
                                    .getString(pCur
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));

                            phoneType = pCur
                                    .getString(pCur
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

                            Log.i("Pratik", name + "'s PHONE :" + phoneNumber);
                            Log.i("Pratik", "PHONE TYPE :" + phoneType);
                        }
                        pCur.close();
                    }

                    planets = new ContactsList[]
                    { new ContactsList(name, phoneNumber) };

                    contacts[i] = planets[0];
                    planetList.addAll(Arrays.asList(planets));

                    i++;
                }
            }

此代码检索所有联系人并将其放入列表中。但我想要唯一的联系人,并且只需要有电话号码的联系人。我怎样才能做到这一点??有没有什么方法可以在查询中传递一些参数来仅选择唯一的联系人???


我认为你的意思是你有一些联系人的重复记录。因此,您必须为查询添加条件。重要的部分是联系人必须是在可见组中 and 有电话号码.

String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
                + ("1") + "'";
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
                + " COLLATE LOCALIZED ASC";
cur = context.getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, projection, selection
                        + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
                        + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated

更新 20/05/2020

  suspend fun fetchContacts(): ArrayList<FriendItem> {
        val list = ArrayList<FriendItem>()
        val uri: Uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI
        val selection = ContactsContract.Contacts.HAS_PHONE_NUMBER
        val cursor: Cursor? = context.contentResolver.query(
            uri,
            arrayOf(
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone._ID,
                ContactsContract.Contacts._ID
            ),
            selection,
            null,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
        )

        cursor?.let {
            val nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
            val phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
            while (cursor.moveToNext()) {
                val info = FriendItem(
                    friendName = cursor.getString(nameIndex),
                    friendPhoneNumber = cursor.getString(phoneIndex)
                )
                list.add(info)
            }
            cursor.close()
        }
        return list
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Android 中选择唯一的联系人 的相关文章

  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 将 CSV 复制到 Amazon RDS 托管的 Postgresql 数据库

    我有一个使用 Amazon 的 RDS 服务托管的数据库 我正在尝试编写一个 Web 服务来更新所述数据库 我遇到的问题是它不允许我使用 COPY 命令 因为我收到此错误 错误 必须是超级用户才能复制到文件或从文件复制 我正在使用我为数据库
  • 如何在 PowerShell 中将长命令拆分为多行

    如何在 PowerShell 中获取如下所示的命令并将其拆分为多行 C Program Files IIS Microsoft Web Deploy msdeploy exe verb sync source contentPath c w
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • Mercurial:带参数的别名

    我想创建一个别名 以便在运行时 hg pushbranch lt
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial
  • 在构建内核模块时为什么需要 /lib/modules? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在Kbuild树中 当我们编写一个简单的hello ko程序时 为什么我们需要在构建规则中使用 C lib module 为什么需要这样做
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • 使用部分字符串匹配进行 Firebase 查询[重复]

    这个问题在这里已经有答案了 假设我有一个简单的 firebase 实时数据库结构 其中关键是username其值为userid 现在我想搜索userid by username 如果用户名匹配 这很容易 但如何获得部分匹配的答案 更清楚地说
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • SSIS 包失败并出现“无法获取连接”错误

    我们有一个从 Web 服务启动的 SSIS 包 在开发环境中 一切正常 但在 QA 环境中 尝试运行包时出现以下错误 无法获取连接 ConnectionName 连接可能未正确配置 或者您可能没有正确的权限这个连接 连接使用 SQL 登录
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切
  • Wordpress - 通过检查用户状态从外部 bbPress 更改论坛角色

    我想检查用户状态并相应更新他们的 bbPress 论坛角色 不是 WordPress 角色 目的是向 BP Registration Options 插件添加功能 以调节用户注册 在 BuddyPress 中 目前 该插件在用户未经批准时将
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include
  • Cycle2 初始化事件未触发

    我使用 Cycle2 作为基本的轮播 我的幻灯片项目有时在其数据中包含一个 url 因此我必须使用 Cycle2 api 事件来使用该 url 当它存在时 我的问题是 虽然 cycle after 事件触发正常 但初始化事件都不会触发 因此
  • 令牌返回后,Google 操作和帐户关联失败

    尝试使用 OAuth2 授权代码流在 Web 模拟器中测试身份验证 https developers google com actions tools web simulator https developers google com ac
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 如何在 ColdFusion 中的 cfloop 查询中获取动态属性名称

    我在一个cfloop通过查询 我想获取一个属性 但直到运行时我才知道该属性是什么 使用 qryResult MyAttr 失败并显示错误 复杂对象类型无法转换为简单值 执行此操作的语法是什么 这是一个简化的示例
  • 包含有关存储过程参数信息的 SQL Server 系统表是什么?

    包含有关存储过程参数的信息 例如数据类型 名称 长度 是否为空 的 SQL Server 系统表是什么 thanks 您可以查询 sys procedures 和 sys parameters select pr name p from s
  • JQuery event.stopPropagation() 不起作用

    在我的 html 中 我在 li 中嵌入了一个 DragHandle 类的跨度 div class treeView ul class tree li span class dragHandle span Item 1 ul li span
  • 打印 html 页面时的边距

    我使用单独的样式表进行打印 是否可以在设置打印边距的样式表中设置左右边距 即纸张上的边距 你应该使用cm or mm当您指定打印时作为单位 使用像素将导致浏览器将其转换为类似于屏幕上显示的内容 使用cm or mm将确保纸张上的尺寸一致 b
  • python 中的并行性无法正常工作

    我正在使用 python 2 7 在 gae 上开发一个应用程序 一个 ajax 调用从 API 请求一些数据 单个请求可能需要约 200 毫秒 但是当我打开两个浏览器并在非常接近的时间发出两个请求时 它们花费的时间比双倍的 我尝试将所有内
  • 纯 Javascript 中的元素坐标

    假设我在 div 中有一个元素 或任何其他包含元素 或者可能只是在文档正文中 如何获取该元素相对于其容器的 x y 坐标 我需要能够用纯 Javascript 来完成它 The offsetTop and offsetLeft属性是相对于o
  • 如何查看 Boost.Build 调用的 g++ 命令行 (1.33.1)

    我摸不着头脑 试图找出为什么在我的机器上构建 Boost 库时没有生成导入库 更具体地说 构建 DLL 工作正常 但我之前 即在重新安装计算机之前 正确生成了导入库 一些规格 升压1 33 1 适用于 Windows 的 g 4 3 3 T
  • 为什么 ES6 类中的“this”不是隐式的?

    我知道 ES6 解决了很多存在的问题thisES5 中的关键字 例如箭头函数和类 我的问题涉及this在 ES6 类的上下文中以及为什么必须显式地编写它 我最初是一名 Java 开发人员 在我的世界里 下面的代码行是非常自然的 class
  • 在另一个进程中从内存执行一个进程?

    我想要一个小型的 应用程序加载器 程序 它通过 TCP 从外部服务器接收其他二进制应用程序文件并运行它们 我可以通过将传输的文件保存到硬盘并使用 system 调用来运行它来做到这一点 但是 我想知道是否可以从内存启动新应用程序而不接触硬盘
  • 为什么 memset 采用 int 而不是 char?

    为什么memset采取一个int作为第二个参数而不是char 然而wmemset需要一个wchar t而不是类似的东西long or long long memset早于 相当多 将函数原型添加到 C 中 没有原型 您can t pass
  • 为什么 xdebug 无法与 NetBeans 建立连接?

    我尝试将 xdebug 与 NetBeans 结合使用来调试 PHP 我开始调试 NetBeans 永远等待与 xdebug 的连接 我的 Mac 上安装了 NetBeans 6 8 最新版本 和最新的 MAMP 软件包 我的 php in
  • MobileSafari 未通过 JavaScript 返回正确的图像大小信息

    我有一个 HTML此问题的测试页在这里 因为某些原因MobileSafari 正在报告Image width height任何超过 1700 像素的图像的属性为其值的一半 那就是width例如 JPG 的属性是 2000 但 MobileS
  • 在 Vue.js 中使用环境变量

    我一直在阅读官方文档 但找不到有关环境变量的任何内容 显然有一些社区项目支持环境变量 但这对我来说可能有点过分了 所以我想知道在处理已经使用 Vue CLI 创建的项目时是否有一些简单的开箱即用的东西可以在本地工作 例如 我可以看到 如果我
  • Electron - IPC - 在窗口之间发送数据

    在主进程中 我创建一个名为的窗口mainWindow 单击按钮后 我创建一个新的browserWindow called notesWindow 我想做的是发送数据notesWindow to mainWindow 我所做的是使用 IPC
  • Laravel:不允许写入 /.../.config/psysh

    我已经使用以下命令在本地安装了 Laravel 应用程序Laravel 安装程序 现在我想将应用程序上传到我的生产服务器 这是一个托管虚拟服务器 但它满足了所有需要要求 我已经上传了应用程序并在 env归档APP URL和DB 进行相应的设
  • 在 Windows 上的 Emacs 中将 Caps Lock 映射到 Control

    当阅读任一these 问题 or the EmacsWiki 文章关于在 Windows 中的 emacs 中将 Caps Lock 映射到 Control 最好的答案似乎涉及注册表 我的问题是 当用户因为没有管理员权限而无法修改计算机的注
  • 按值对并发映射条目进行排序

    有没有办法创建一个线程安全的实现Map维护按值排序的条目 我知道我可以创建一个线程安全的Map像这样 ConcurrentMap
  • PowerShell 脚本在粘贴到 PowerShell 窗口时运行,但在从快捷方式运行时不运行

    我正在尝试编写一个脚本 将多个 Excel 文件转换为 PDF 文件 我找到了一个有效的在线链接 path Read Host Prompt Input Directory Path and Press Enter xlFixedForma
  • 在第一个匹配之前插入行的命令

    我有包含以下信息的文件 testing testing testing 我想使用 sed 或任何 Linux 命令在第一个测试单词之前插入一个单词 已测试 需要得到类似的输出 tested testing testing testing T
  • 如何从 Android 中选择唯一的联系人

    我想选择独特的联系方式从 Android 只显示有电话号码的联系人 我正在使用这个代码 ContentResolver cr getContentResolver Cursor cur cr query ContactsContract C