如何在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卡中? 的相关文章

  • JKS、BKS 和 PKCS12 文件格式

    我正在设置一个无头服务器 该服务器使用用户提供的数据 JS CSS HTML 密钥库 为 Android 构建 Phonegap 混合应用程序 我想进行一些基本的客户端检查 以确保上传的密钥库有效 对于 JKS 文件 我发现可以通过确保提供
  • GCM 通知的自定义 UI

    In GCM Docs http developer android com google gcm gcm html其给定 它不提供任何内置用户界面或其他处理 消息数据 GCM 只是将收到的原始消息数据直接传递给 Android 应用程序
  • 如何在 Android 中以编程方式配置启动器活动?

    我正在开发一个具有两项活动的应用程序 LoginActivity and MainActivity 当用户首次打开应用程序时 他将登录并且他的凭据 用户名和令牌 保存在Preferences 现在 如果用户再次打开应用程序MainActiv
  • Android 的 GCM 推送通知[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近 我尝试学习 GCM 并制作一个测试应用程序 该应用程序将通过 androids 官方网站获取 an
  • 当应用程序停止使用 Sencha Touch 2.2 和 Phonegap 时,LocalStorage 存储不会保留在 Android 手机上

    这在我的浏览器中工作正常 但是当我在手机上安装该应用程序并使用它时 它看起来很好 直到我强制它停止并重新打开该应用程序 然后我的所有记录都消失了 我正在使用 2 2 和 Phonegap 任何帮助将非常感激 这是我的商店 Ext defin
  • 如何在发布版本中使用 Zebra EMDK?

    所以我有一台 Zebra MC330M 设备 我之前创建了一个应用程序 我想使用 PDA 内置的条形码扫描仪 如果在调试模式下运行我的应用程序 一切正常 我可以读取条形码 但是如果我创建暂存或释放版本 apk 则条形码读取器不活动 因此如果
  • 无法打开本地终端

    我尝试在 Android Studio 中初始化我的终端 但它给了我错误 它说 无法打开本地终端 java io IOException 无法创建 PTY 我的电脑运行的是 Windows 10 如何解决这个问题 当您从 Github 存储
  • 将文本视图包裹在图像视图周围

    晚上好 我正在尝试将文本包裹在图像视图中 就像这里提出的问题一样 Textview 环绕 View https stackoverflow com questions 3626750 textview wrap around view 在风
  • 如何区分ActionBarSherlock中的两次菜单项点击?

    我最近一直在使用 ActionBarSherlock 并按照各种教程 我编写了这段代码来将项目添加到操作栏 Override public boolean onCreateOptionsMenu Menu menu menu add Ref
  • 如何使用RecyclerView.State保存RecyclerView滚动位置?

    我有一个关于 Android 的问题RecyclerView State http developer android com reference android support v7 widget RecyclerView State h
  • 如何在android中的应用程序小部件中找到哪个按钮被点击?

    我想设计一个简单的应用程序小部件 它有两个文本视图和两个用于上一个 下一个的按钮 我很难处理应用程序小部件中的按钮单击 实际上我的愿望是 如果用户单击上一个按钮 我想显示以前的值 如果用户单击下一个按钮 我想显示数据库中的下一个值 如何知道
  • GCM(Google 云消息传递)是否需要 Google 帐户?

    我需要编写一个简单的应用程序来获取推送通知 我使用 GCM 它使用 Google Play 服务来获取信息 我的问题是 要访问 GCM 是否需要 Google 帐户 我可以使用其他电子邮件帐户来识别设备吗 有没有其他方法可以获取另一个电子邮
  • SDK 管理器中缺少 Google Play 服务

    我想在我的应用程序中使用 Google 地图 我想在 SDK 管理器中安装 Google Play 服务 但是当我转到 SDK 管理器时 我没有看到 Google Play 服务 为什么 我该如何安装这个 我可以独立于 SDK Manage
  • 在 Android 5 上支持 BLE 外设角色的芯片组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Android 5 0 Lollipop 引入的新 BLE 外设模式将不会在 Nexus 4 5 或 7 上启用 https code
  • 在 android studio 上单击推送通知后重定向到特定活动

    我正在努力开发一个 Android 应用程序 以便在单击所有传入的推送通知时将应用程序重定向到特定的活动页面 我是 Android 开发新手 对我的编程感到抱歉 下面是推送通知部分的 android manifest xml 如果对此主题有
  • 未调用内容提供商 query() (Android TV)

    据报道 我正在尝试将我的应用程序纳入 Android TV 全局搜索中文档 http developer android com training tv discovery searchable html我必须创建以下内容 内容提供商 可搜
  • Android 简单 TextView 动画

    我有一个 TextView 我想倒计时 3 2 1 发生了事情 为了使其更有趣 我希望每个数字都以完全不透明开始 然后淡出至透明 有没有一种简单的方法可以做到这一点 尝试这样的事情 private void countDown final
  • 从 Activity 调用选项卡式片段方法

    我有一项活动由三个片段组成 这些片段使用使用 PagerAdapter 的操作栏选项卡 我想要做的是从主活动访问活动选项卡式片段中的方法 我已经尝试了下面的代码 但这只是将片段返回为空 所以我猜它无法在选项卡中找到它 NPListFragm
  • 我的 apk 文件在模拟器中的位置

    我在 eclipse android 中编写了一个小程序 现在我安装并运行我的程序 它是一个 apk 现在我想知道我的 apk 文件在哪里 我什至想将它 拉 到我的系统中 是否可以 如果是这样请帮助我 如果您只想将 apk 安装在手机或类似
  • Android 使用非公历

    我正在创建一个DatePickerDialogFragment用户将在其中选择出生日期 我想确保我可以处理非公历日期 我无法更改在我的设备上使用的日历类型 Android 是否允许用户切换日历类型 如果是的话 步骤是什么 到目前为止我还没有

随机推荐

  • 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 卡中的联系人