java
  • android
  • 2012-01-18 126 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

    相關問題