如何在Android中获取电话簿中的所有联系人到SIM卡中?

2024-03-27

我正在努力从我的应用程序中的电话簿和 SIM 卡中获取所有联系人。我想将所有联系人存储在我的应用程序 SQLite DB 中。我正在使用的代码在正常情况下工作正常。在以下条件下出现问题:

  1. 对于没有名字的联系人,那只是号码。
  2. SIM 卡中的联系人。

我的代码没有向我提供这两种类型的联系人。我正在使用下面的代码:

public void getDefaultContactsToDB(){
        CallBackDatabase callbackDB = new CallBackDatabase(RequestCallBack.this);
        callbackDB.open();

        //clean the database before entering new values.
        callbackDB.deleteTable(CallBackDatabase.DATABASE_TABLE);

        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor cur1 = cr.query( 
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                        new String[]{id}, null); 
                while (cur1.moveToNext()) { 
                    //to get the contact names
                    ArrayList<String> numbers= new ArrayList<String>();
                    String contactNoumber="";
                    String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    if(name!=null){
                        Log.e("Name :", name);
                        if(name.equalsIgnoreCase("011999999999999999")){
                            System.out.println("got it");
                        }
                    }
                    //to get the contact email
                    String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    if(email!=null)
                        Log.e("Email", email);

                    String hasNoumber = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    if(Integer.parseInt(hasNoumber)>0){ 
                        Cursor pCur = getContentResolver().query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "
                                        +cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)),null, null);
                        int i = 0;
                        while (pCur.moveToNext()) {
                            //to get the contact number
                            contactNoumber = pCur.getString(pCur.getColumnIndex("DATA1"));
                            if(contactNoumber.equalsIgnoreCase("011999999999999999")){
                                System.out.println("got it");
                            }
                            contactNoumber = Constant.removeSpecialCharacters(contactNoumber);
                            Log.e("contactNoumber", contactNoumber);
                            // Getting Phone numbers
                            String numType = null;
                            if(pCur.getString(pCur.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){

                                switch(pCur.getInt(pCur.getColumnIndex("data2"))){
                                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME :
                                    numType = "HOME";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE :
                                    numType = "MOBILE";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK :
                                    numType = "WORK";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER :
                                    numType = "OTHER";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT :
                                    numType ="OTHER";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK :
                                    numType = "CALLBACK";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_CAR :
                                    numType ="CAR";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN :
                                    numType = "COMPANY MAIN";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME :
                                    numType = "FAX HOME";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK :
                                    numType = "FAX WORK";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_MAIN :
                                    numType = "MAIN";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_ISDN :
                                    numType = "ISDN";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_MMS :
                                    numType = "MMS";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER_FAX :
                                    numType = "OTHER FAX";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_PAGER :
                                    numType = "PAGER";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_RADIO :
                                    numType = "RADIO";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_TELEX :
                                    numType ="TELEX";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_TTY_TDD :
                                    numType = "TTY TDD";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE :
                                    numType = "WORK MOBILE";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_PAGER :
                                    numType = "WORK PAGER";
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM :
                                    numType = "CUSTOM";
                                    break;
                                default:
                                    break;
                                }
                            }

                            numbers.add(i, contactNoumber+"("+numType+")");

                            i++;
                        }
                        String numInDB = null;
                        for (int j = 0; j < i; j++) {
                            if(j==0)
                                numInDB =numbers.get(j);
                            else
                                numInDB =numInDB + "," +numbers.get(j);
                        }
                        if(contactNoumber.length()>0){
                            if(name!=null){

                            }else{
                                name = contactNoumber;
                            }
                            callbackDB.InsertContacts(null, name+"="+numInDB, contactNoumber, email);
                        }
                    }
                } 
                cur1.close();
            }
            //CLOSE DB
            callbackDB.close();
        }
    }

下面的代码显示了阅读所有内容的简单方法phone numbers and names:

   Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
   while (phones.moveToNext())
   {
    String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
  }
   phones.close();

此外,仅对于 Sim 联系人,您可以使用以下代码:

 private void allSIMContact()
  {
    try
    {
        String m_simPhonename = null; 
        String m_simphoneNo = null;

        Uri simUri = Uri.parse("content://icc/adn"); 
        Cursor cursorSim = this.getContentResolver().query(simUri,null,null,null,null);

        Log.i("PhoneContact", "total: "+cursorSim.getCount());

        while (cursorSim.moveToNext()) 
        {      
            m_simPhonename =cursorSim.getString(cursorSim.getColumnIndex("name"));
            m_simphoneNo = cursorSim.getString(cursorSim.getColumnIndex("number"));
            m_simphoneNo.replaceAll("\\D","");
            m_simphoneNo.replaceAll("&", "");
            m_simPhonename=m_simPhonename.replace("|","");

            Log.i("PhoneContact", "name: "+m_simPhonename+" phone: "+m_simphoneNo);
        }        
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

EDITED:

要获取联系人的详细信息,例如家庭、手机、传真等,您需要单独检查,如下所示:

        while (phone_crsr.moveToNext()) 
            { 
       int phone_type = phone_crsr.getInt(phone_crsr.getColumnIndex(Phone.TYPE));  
            switch (phone_type) 
            {    
            case Phone.TYPE_HOME: 
                 phone_home =phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                 Toast.makeText(this, "home"+phone_home, Toast.LENGTH_LONG).show();
                 break;          
            case Phone.TYPE_MOBILE:    
                 phone_mob=phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                 Toast.makeText(this, "mob"+phone_mob, Toast.LENGTH_LONG).show();  
                 break;            
            case Phone.TYPE_WORK:                                
                 phone_work=phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                  Toast.makeText(this, "work"+phone_work, Toast.LENGTH_LONG).show();
                         break;           
             }
            }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Android中获取电话簿中的所有联系人到SIM卡中? 的相关文章

  • 使用 Retrofit 2.0 发布多部分表单数据,包括图像

    我正在尝试使用 HTTP POST 到服务器改造2 0 MediaType MEDIA TYPE TEXT MediaType parse text plain MediaType MEDIA TYPE IMAGE MediaType pa
  • Android-使用 ViewHolder 和 AsyncTask 加载联系人-缩略图问题

    我正在创建一个自定义联系人应用程序 我使用带有 ViewHolder 设计模式的 ArrayAdapter 进行优化 由于加载缩略图需要花费大量时间 因此我使用 AsyncTask 类来加载图像 用于第一组联系人我的屏幕上 图片加载得很好
  • 让两种口味使用相同的sourceSet

    我有两种风格 demo 和 full 每种风格都有自己的源集在 src demo 和 src full 中 这很好用 我现在想做第三种使用这些源集之一的风格 我该怎么做呢 我尝试过类似的东西 productFlavors full appl
  • ListView 滚动时隐藏和显示浮动按钮

    我正在我的应用程序中创建一个 listView 和一个浮动按钮 我希望根据滚动状态实现隐藏和返回的效果 当 的时候ListView滚动时按钮隐藏得很好 但是当滚动停止时按钮不会返回到其初始位置 有任何想法吗 My Code public c
  • Kotlin 中使用 Retrofit @PartMap 的多部分请求错误 (Android)

    如果我在 Java 中使用这段代码 那么它工作得很好 当我在 kotlin 中转换该代码时 出现错误 Logcat 08 20 23 46 51 003 3782 3782 com qkangaroo app W System err ja
  • 如何减少 Android 布局中文本之间的行距?

    我想减少所附布局中文本之间的行距 User12 5 部电影 改进 2 5 下面是 xml 我尝试删除 singleLine true 语句并尝试将其设置为 false
  • 空 Activity 中的内存泄漏

    我最近决定使用泄漏金丝雀 https github com square leakcanary在我的项目中 所以我创建了一个空的项目Activity只是为了测试 当我运行应用程序时 在没有逻辑代码或视图的项目创建之后 我从这个库中获得了内存
  • 如何禁用列表视图中的项目?

    我有一个列表视图 它是通过数据库中的记录填充的 现在我必须使一些记录可见但不可选择 我怎样才能做到这一点 这是我的代码 public class SomeClass extends ListActivity private static L
  • Firebase Android:电子邮件链接身份验证。意图过滤器不起作用

    我正在为 Android 实现 firebase 电子邮件链接身份验证机制 我已经使用 firebase 指南实现了它 但现在打开电子邮件中的链接后 应用程序始终会进入启动器活动 我无法调试该问题 我还在我的应用程序中实现了动态链接 效果很
  • 如何检测 Android 设备是否与 Android Wear 手表配对

    我正在创建一个 Android Wear 应用程序来扩展推送通知 当收到推送通知时 我的应用程序会从服务器下载大约 10 张图像 并在手表上显示这些附加图像 这些图像特定于 Android Wear 应用程序 不会显示在手持设备上 如何判断
  • 改造2:使用json对象发送文件

    我在请求正文中发送对象 如下所示 title test description test images POST create data Call
  • 取消正在执行的 AsyncTask 的理想方法

    我正在后台线程中运行远程音频文件获取和音频文件播放操作AsyncTask A Cancellable显示获取操作运行时间的进度条 我想取消 中止AsyncTask当用户取消 决定反对 操作时运行 处理这种情况的理想方法是什么 刚刚发现Ale
  • 直接在布局 xml 中填充微调器

    是否可以在布局 xml 中直接填充 Spinner 的选项 这一页 http developer android com guide tutorials views hello spinner html建议我应该使用 ArrayAdapte
  • RecyclerView onItemClickListener 不工作

    我正在研究回收视图并尝试对 recyclerview 的每个项目使用点击侦听器界面 这是我的活动课程 public class LegacyHomeActivity extends ActivityBaseDrawer private Li
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • Android 基础知识:在 UI 线程中运行代码

    从在 UI 线程中运行代码的角度来看 以下两者之间有什么区别 MainActivity this runOnUiThread new Runnable public void run Log d UI thread I am the UI
  • Android Studio 上的 Twitter Kit Fabric Android 模块库

    我在使用适用于 Android 的 Twitter Kit SDK 时遇到问题 我需要将 Twitter Kit SDK 导入到我的项目中的库 模块 我正在使用 Android Studio 我正在使用适用于 Android 的 Fabri
  • android中使用xml的新自定义字体方法

    随着 android 发布 O 预览版 添加了一个新功能 称为xml 中的字体 它很容易实现 但我没有什么疑问 让我首先添加最好的方法1 右键单击资源文件夹并前往新建 gt Android 资源目录 新的出现资源目录窗口 2 在资源类型列表
  • 在Android中创建自定义按钮类

    我正在尝试为我的 Android 应用程序创建自定义按钮类 public class TicTacButton extends Button 我已经在里面设置了所有构造函数TicTacButton并创建了自定义方法和属性 在我的主要活动中
  • 错误:找不到 com.google.firebase.storage.UploadTask.TaskSnapshot 类型的符号方法 getDownloadUrl()

    在 gradle update 之前一切正常 但后来弹出了这个错误 我参考了官方文档 它提供了相同的代码 不接受 getDownloadUrl 方法 https i stack imgur com YLC2x png 我已经添加了最新的正确

随机推荐

  • cvc-elt.1:找不到元素“MyElement”的声明

    我正在尝试使用 xsd 验证一个非常简单的 xml 但由于某种原因我收到此错误 如果有人能向我解释原因 我将非常感激 XML File
  • ngx/translate - 仅翻译字符串的一部分

    我需要使用翻译来自服务器的字符串ngx 翻译 https github com ngx translate core 当我需要翻译字符串时它工作得很好 但在某些情况下我只需要翻译字符串的一部分 例如 你好谢伊 或 你好约翰 我只需要翻译 你
  • 将数据透视缓存从一个文件上的数据透视传输到另一个文件上的数据透视?

    我需要将 Excel 文件上的数据透视表的缓存安全地传输到另一个文件上的数据透视表中 我怎样才能做到这一点 这是我现在使用的代码 请注意 即使源数据透视数据源已被消除 此方法仍然有效 Public Sub TransferPivotCach
  • Rails 重命名协会

    我有两个模型 TreeNode 和 User 每个用户has oneTreeNode 即树的根 class TreeNode acts as tree belongs to user end class User has one tree
  • Django manage.pysyncdb 抛出 No module named MySQLdb

    我是一个学习Python Django的新手 我正在使用以下教程here http docs djangoproject com en dev intro tutorial01 intro tutorial01 在 Snow Leopard
  • TerminateProcess 不适用于经过验证的进程 ID

    我正在开发应该杀死具有给定名称的进程的应用程序 我使用的操作系统是 Windows 7 问题是 对于任务管理器中列出的具有非空白用户名字段的所有进程 它都可以正常工作 但是 当进程的用户名为空时 即使任务管理器也无法杀死该进程 谁能告诉我为
  • 用法:java cucumber.api.cli.Main [选项] [ [FILE|DIR][:LINE[:LINE]*] ]+

    我在运行功能文件时收到此错误 Usage java cucumber options FILE DIR LINE LINE Options g glue PATH Where glue code step definitions and h
  • PHP MongoDB 使用 $in/$or 更新多个文档

    我无法弄清楚如何在 PHP 中构建更新查询来更新文档 ID X Y 和 Z 有人有这方面的经验吗 ids array new MongoId 4eaaf929498fe2c80300000c new MongoId 4eaaff24498f
  • 为什么这段Java代码可以编译?

    在方法或类范围内 下面的行将进行编译 带有警告 int x x 1 在班级范围内 变量获取默认值的地方 以下给出 未定义的引用 错误 int x x 1 这不是第一个吗x x 1应该最终出现相同的 未定义引用 错误吗 或者也许是第二行int
  • 如何使用javascript通过网络摄像头录制视频

    我想通过网络摄像头录制视频并将其上传到服务器 我不想使用任何插件 我怎样才能至少录制视频 GitHub上有一个项目叫记录RTC https github com muaz khan WebRTC Experiment tree master
  • 视图被关闭时发生自动布局内部错误

    当我驳回一些我有一些限制的观点时 我遇到了一个有趣的错误 自动布局内部错误 找不到传出行头 期间传入head AppName ViewName 0x7fc072ed8ef0 Width id 6805 系数接近零的变量的优化 应该 永远不会
  • JSON 名称-值对可以有空名称吗?

    我正在使用测试套件中的 example json 测试我的 JSON 代码here https code google com p json test suite 它包含很多名称 值对 其中名称只是一个空字符串 即 它是否正确 RFC462
  • 雅虎财经 API - GET 报价返回“无效 Cookie”

    在过去的几年中 我一直使用以下链接来获取查询中符号的完整当前报价 https query1 finance yahoo com v7 finance quote symbols AAPL https query1 finance yahoo
  • 如何将自定义表情符号上传到我的 Discord 机器人

    我已经制作了一个不和谐的机器人 现在我想开始添加自定义表情符号 我看过很多关于如何使用 client cache 或其他东西来输入表情符号的教程 但如何上传它们并获取它们的 ID 以在我的不和谐机器人中使用 我希望得到快速而简单的答案 lt
  • Google Analytics - 多个帐户的多个跟踪器?

    也许我的做法是错误的 但我希望我能得到一些见解 我为全国多个客户开发 我使用我的个人 开发分析帐户来跟踪我的许多网站 该帐户跟踪我所处理的所有域 配置文件 然而 现在营销人员也加入了进来 他们都希望安装自己的 GA 跟踪器 以及其他一些第三
  • 快速创建线程?

    我正在尝试快速生成一个线程 所以我有这一行 let thread NSThread target self selector doSomething object nil doSomething 是类范围内的函数 该行给出了这个错误 找不到
  • Java 的 SASS 实现? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 Java 中的 SASS 实现 可以与 JSP JSF 一起使用 对于 Python 我找到了 CleverCSS 但对于 J
  • 把我从 IE6 中拯救出来

    我正准备开始为一家相当大的公司开发一个新的网络项目 对于他们的所有用户 大约 17 000 人 来说 他们都被 IE6 困住了 他们计划在今年年底前让所有人过渡到 IE7 但 IT 部门开始推迟这一承诺 我被要求做的是给项目发起人更多的支持
  • 臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

    我正在尝试将支持数据库的 JSP 添加到现有的 Tomcat 5 5 应用程序 GeoServer 2 0 0 如果有帮助的话 应用程序本身与 Postgres 通信得很好 所以我知道数据库已启动 用户可以访问它 所有这些都是好东西 我想要
  • 如何在Android中获取电话簿中的所有联系人到SIM卡中?

    我正在努力从我的应用程序中的电话簿和 SIM 卡中获取所有联系人 我想将所有联系人存储在我的应用程序 SQLite DB 中 我正在使用的代码在正常情况下工作正常 在以下条件下出现问题 对于没有名字的联系人 那只是号码 SIM 卡中的联系人