java
  • android
  • 2012-01-18 129 views 6 likes 
    6

    我想在Android中分别读取所有sim联系人和手机联系人。我搜索了这个,发现很多人有这个问题,我还找不到任何解决方案。我喜欢一些回答here,但它不适合我。 当我测试这一点,给我的谷歌联系人:如何分别读取android sim联系人和手机联系人

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

    但是当我测试这一点,不给我SIM卡联系人:

    RawContacts.ACCOUNT_TYPE + " = 'com.android.contacts.sim' " 
    

    后来我发现RawContacts是通过同步适配器中创建联系人here。这可能是问题所在。因此,谁能告诉我,让

    • 所有simcontacts
    • 所有手机联系人

    感谢的方式。

    +1

    也许在ACCOUNT_TYPE中存在拼写错误?试试'com.android.contacts.sim'。 – Ash 2012-01-18 10:56:10

    +0

    ohh对不起,我输入了一个错误,但事实并非如此:)我会编辑这个 – sampathpremarathna 2012-01-18 10:59:24

    +0

    你有没有找到解决方案? – 2012-07-09 14:50:51

    回答

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

    字符串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(); 
    } 
    
    +0

    感谢您的replay.in第一个例子,我得到所有联系人(不仅联系人保存到手机,但也模拟和谷歌同步) – sampathpremarathna 2012-01-18 11:51:25

    +0

    第二个它的 – sampathpremarathna 2012-01-18 12:13:02

    +0

    有没有办法获得手机通讯录,除了保存的联系人与谷歌(或其他同步帐户)进行SIM卡或同步。 – sampathpremarathna 2012-01-18 14:52:23

    3

    我发现很多电话在RawContacts.ACCOUNT_TYPE使用"com.android.contacts.sim"于SIM卡联系人。但我也发现HTC使用“com.anddroid.contacts.sim”(拼写错误 for android)。这很奇怪。

    +0

    ,还有一些使用“vnd.sec.contact.sim”。 – sampathpremarathna 2012-12-24 03:11:19

    +0

    如何找到所有可能的SIM和本地帐户,以便将新联系人保存到哪里,而不管它在哪个设备上运行? – 2016-05-15 11:35:16

    相关问题