2014-10-31 71 views
3

任何人都可以指導我爲下面的問題找到解決方案。如何識別android中的本地手機聯繫人和SYNC手機聯繫人?

  1. 我必須識別手機聯繫人是否保存在本地或電子郵件?(編程)

我已閱讀來自google docContactsContract.Groups,其中包含有關原始聯繫人羣組,如信息Gmail聯絡人羣組。目前的API不支持跨多個帳戶的組的概念。

基於此我已經嘗試了下面的代碼。

StringBuffer output = new StringBuffer(); 
    final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, 
      ContactsContract.Groups.TITLE, 
      ContactsContract.Groups.SUMMARY_WITH_PHONES 
      }; 

Cursor c = getContentResolver().query(
ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, 
     null, ContactsContract.Groups.TITLE); 

    int IDX_ID = c.getColumnIndex(ContactsContract.Groups._ID); 
    int IDX_TITLE = c.getColumnIndex(ContactsContract.Groups.TITLE); 
    output.append("title"+IDX_TITLE+"\n"); 
    Map<String,GroupInfo> m = new HashMap<String, GroupInfo>(); 

while (c.moveToNext()) { 
    output.append("test...\n"); 
    GroupInfo g = new GroupInfo(); 
    g.id = c.getString(IDX_ID); 
    g.title = c.getString(IDX_TITLE); 
    output.append("title"+c.getString(IDX_TITLE)+"\n"); 
    int users = c.getInt(c.getColumnIndex(ContactsContract.Groups.SUMMARY_WITH_PHONES)); 
    if (users>0) { 
     // group with duplicate name? 
     GroupInfo g2 = m.get(g.title); 
     if (g2==null) { 
      m.put(g.title, g); 
      output.append("title"+g.title+"\n"); 
      groups.add(g); 
     } else { 
      g2.id+=","+g.id; 
     } 
    } 
} 
outputText.setText(output); 
c.close(); 

但沒有希望。

回答

2

我張貼這個答案以供將來使用。我們可以通過使用叫做RawContacts.SOURCE_ID

領域區分本地手機通訊錄與同步通訊錄它被描述here

SOURCE_ID
讀/寫
String唯一地標識該行的源帳戶。通常,它在插入原始聯繫人時設置,並且之後永遠不會更改。一個明顯的例外是新的聯繫人:它將有一個帳戶名稱和類型(可能還有一個數據集),但沒有源ID。這向同步適配器指示需要在服務器端創建新聯繫人,並將其ID存儲在電話的相應SOURCE_ID字段中。

示例代碼如下,它給出了同步聯繫人的id,其他人爲null。

private void testContact() { 
     StringBuffer output = new StringBuffer(); 
     ContentResolver resolver = getContentResolver(); 
     Cursor contacts = resolver.query(Contacts.CONTENT_URI, null, 
       Contacts.HAS_PHONE_NUMBER + " != 0", null, Contacts._ID 
         + " ASC"); 
     Cursor data = resolver.query(Data.CONTENT_URI, null, Data.MIMETYPE 
       + "=? OR " + Data.MIMETYPE + "=?", new String[]{ 
       Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE}, 
       Data.CONTACT_ID + " ASC"); 

     int idIndex = contacts.getColumnIndexOrThrow(Contacts._ID); 
     int nameIndex = contacts.getColumnIndexOrThrow(Contacts.DISPLAY_NAME); 
     int cidIndex = data.getColumnIndexOrThrow(Data.CONTACT_ID); 
     int data1Index = data.getColumnIndexOrThrow(Data.DATA1); 
     boolean hasData = data.moveToNext(); 

     while (contacts.moveToNext()) { 
      long id = contacts.getLong(idIndex); 
      Uri rawContactUri = 
         ContentUris.withAppendedId(RawContacts.CONTENT_URI, id); 

        Uri entityUri = 
         Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); 

        Cursor c = 
         getContentResolver().query(
         entityUri, 
         new String[] { 
            RawContacts.ACCOUNT_NAME, 
          RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1}, 
         null, null, null); 

        try { 
         while (c.moveToNext()) { 
          String sourceId = c.getString(0); 
          if (!c.isNull(1)) { 

           String source_id = c.getString(1); 
          try { 
            output.append(c.getString(4)+sourceId+" "+source_id+"\n"); 

            //output.append(datas+ "Sync1 "+ c.getString(4)+" Sync2 "+ c.getString(5)+" Sync3"+ c.getString(6)+" Sync4 "+ c.getString(7)+"\n"); 
           } catch (Exception e) { 
            e.printStackTrace(); 
           } 
           //decide here based on mimeType, see comment later 
          } 
         } 
        } finally { 
         c.close(); 
        } 

     } 

     outputText.setText(output); 
    } 
1

有一個讀通過this,看看是否ACCOUNT_TYPE也許能幫助你

+0

謝謝您的回答,但它總是給所有聯繫人的所有聯繫人「com.android.exchange」 – Amith 2014-10-31 10:09:35

+0

對不起帳戶名相同 – Amith 2014-11-03 05:17:55