如何分别读取安卓SIM卡联系人和手机联系人

6

我希望在Android中分别读取所有sim联系人和手机联系人。我搜索了一下,发现很多人都遇到了这个问题,但我还没有找到任何解决方案。我在这里找到了一些答案,但对我来说并没有起作用。当我测试时,它给我显示的是谷歌联系人:

RawContacts.ACCOUNT_TYPE + " = 'com.google' "

但是当我测试时,它没有给我SIM卡联系人:
RawContacts.ACCOUNT_TYPE + " = 'com.android.contacts.sim' "

我发现“RawContacts”是由同步适配器创建的联系人,源自这里。这可能是问题所在。那么请问有谁知道获取以下内容的方法:

  • 所有SIM卡联系人
  • 所有手机联系人

谢谢。


1
ACCOUNT_TYPE 中可能有拼写错误?请尝试使用 com.android.contacts.sim - Ash
哦,抱歉我打错了,但那不是问题:)。我会修改的。 - sampathpremarathna
没有朋友 :( 。但我最终决定分别读取具有和不具有Account_Type的联系人,例如ACCOUNT_TYPE为null和ACCOUNT_TYPE='the_account'。但我认为您可以通过读取所有帐户类型为空的联系人(列表1)和读取所有SIM联系人(列表2),然后从列表1中删除列表2来完成此操作。 - sampathpremarathna
2个回答

13

用于电话联系人

try
{
    String[] PROJECTION=new String[] {Contacts._ID,
        Contacts.DISPLAY_NAME,
        Phone.NUMBER
    };

    Cursor c=managedQuery(Phone.CONTENT_URI,
        PROJECTION, null, null, null);
        if (c.moveToFirst()) {
            String ClsPhonename = null;
            String ClsphoneNo = null;

            do 
            {
                ClsPhonename = c.getString(c.getColumnIndex(Contacts.DISPLAY_NAME));
                ClsphoneNo = c.getString(c.getColumnIndex(Phone.NUMBER));


                ClsphoneNo.replaceAll("\\D", "");
                ClsPhonename=ClsPhonename.replaceAll("&", "");
                ClsPhonename.replace("|","");
                String ClsPhoneName=ClsPhonename.replace("|","");

                }   

            } while(c.moveToNext());
        }

用于SIM卡联系人

String ClsSimPhonename = null; String ClsSimphoneNo = null;

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

    while (cursorSim.moveToNext()) 
    {      
        ClsSimPhonename =cursorSim.getString(cursorSim.getColumnIndex("name"));
        ClsSimphoneNo = cursorSim.getString(cursorSim.getColumnIndex("number"));
        ClsSimphoneNo.replaceAll("\\D","");
        ClsSimphoneNo.replaceAll("&", "");
        ClsSimPhonename=ClsSimPhonename.replace("|","");
            System.out.println("SimContacts"+ClsSimPhonename);
            System.out.println("SimContactsNo"+ClsSimphoneNo);
            dts.createDatabse("MyCellFamily",getApplicationContext());

    }        
}
catch(Exception e)
{
    e.printStackTrace();
}

感谢回复。在第一个示例中,我获取了所有联系人。(不仅是保存在手机上的联系人,还包括与 Google 同步的 SIM 卡联系人) - sampathpremarathna
除了保存在SIM卡中或与Google(或其他同步帐户)同步的联系人外,是否没有其他获取手机联系人的方法? - sampathpremarathna
如何删除此联系人? - Amal El-galant
@bindal,你发布的代码用于导出联系人很好,但我想知道如果我们有双卡,那么我们如何获取两个SIM卡的URI,或者我如何分别保存或读取两个SIM卡。 - Mhanaz Syed

4

我发现很多手机在sim卡联系人中使用"com.android.contacts.sim"作为RawContacts.ACCOUNT_TYPE,但我也发现HTC使用"com.anddroid.contacts.sim"(拼写错误的android)。这很奇怪。


有些人也使用“vnd.sec.contact.sim”。 - sampathpremarathna
1
无论在哪个设备上运行,如何找到新联系人可以保存到的所有可能的SIM和本地账户? - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接