2013-10-10 54 views
0

當試圖創建新的聯繫人組,我發現,新組不能在移動中可以看出,除非我設置ContactsContract.Groups.ACCOUNT_NAME and ACCOUNT_TYPE什麼是ContactsContract.Groups.ACCOUNT_NAME/TYPE?

ArrayList<ContentProviderOperation> o = new ArrayList<ContentProviderOperation>(); 
o.add(ContentProviderOperation.newInsert(Groups.CONTENT_URI) 
     .withValue(ContactsContract.Groups.TITLE, groupTitle) 
     .withValue(ContactsContract.Groups.GROUP_VISIBLE, true) 
     .withValue(ContactsContract.Groups.ACCOUNT_NAME, "[email protected]_local.com") // without these two lines the new group will not be shown 
     .withValue(ContactsContract.Groups.ACCOUNT_TYPE, "[email protected]_local.com") 
     .build()); 
try { 
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, o); 
} catch (Exception e) { 
    Log.e("ContactsManager", "Failed to create new contact group: "+e); 
    return; 
} 

通過列出所有羣體,我發現,所有的組,其ACCOUNT_TYPE/NAME爲空將不會在系統的聯繫人應用程序中看到,即使其Groups.VISIBLE也是如此。

有沒有一個指導方針,我應該爲新組設定什麼價值?

回答

0

看起來好像在Android中可能有多個聯繫人帳戶,系統的聯繫人應用程序可能只顯示感興趣的帳戶。所以,一種正確的方法是獲取默認帳戶名稱和類型。

這裏是得到默認的帳戶名和類型的函數:

private String[] getDefaultAccountNameAndType() { 
    String accountType = ""; 
    String accountName = ""; 

    long rawContactId = 0; 
    Uri rawContactUri = null; 
    ContentProviderResult[] results = null; 

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_NAME, null).withValue(RawContacts.ACCOUNT_TYPE, null).build()); 

    try { 
     results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } finally { 
     ops.clear(); 
    } 

    for (ContentProviderResult result : results) { 
     rawContactUri = result.uri; 
     rawContactId = ContentUris.parseId(rawContactUri); 
    } 

    Cursor c = getContentResolver().query(
      RawContacts.CONTENT_URI 
      , new String[] {RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME} 
      , RawContacts._ID+"=?" 
      , new String[] {String.valueOf(rawContactId)} 
      , null); 

    if(c.moveToFirst()) { 
     if(!c.isAfterLast()) { 
      accountType = c.getString(c.getColumnIndex(RawContacts.ACCOUNT_TYPE)); 
      accountName = c.getString(c.getColumnIndex(RawContacts.ACCOUNT_NAME)); 
     } 
    } 

    getContentResolver().delete(rawContactUri, null, null); 

    c.close(); 
    c = null; 

    return new String[] { accountName, accountType }; 
} 

然後,我們可以創建新組時設置它們:

String accountNameType[] = getDefaultAccountNameAndType(); 
ArrayList<ContentProviderOperation> o = new ArrayList<ContentProviderOperation>(); 
o.add(ContentProviderOperation.newInsert(Groups.CONTENT_URI) 
     .withValue(Groups.TITLE, groupTitle) 
     .withValue(Groups.GROUP_VISIBLE, true) 
     .withValue(Groups.ACCOUNT_NAME, accountNameType[0]) 
     .withValue(Groups.ACCOUNT_TYPE, accountNameType[1]) 
     .build()); 
try { 
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, o); 
} catch (Exception e) { 
    Log.e("ContactsManager", "Failed to create new contact group: "+e); 
    return; 
} 
相關問題