0

我將帳戶名稱從列表傳遞給此方法。現在我想知道哪些這些帳戶名稱只在聯繫人表中讀取,所以我只迭代光標一次從原始光標獲取聯繫人ID。獲取contact_id後,我使用電話遊標來檢查給定的ID是否只讀,但我無法做到。請有以下如何從Android中的聯繫人中的聯繫人ID獲取只讀帳戶名稱

private void displayAllContactsByType(String accountName) { 

    Cursor rawCursor,phones = null; 

    rawCursor = cResolver.query(
      ContactsContract.RawContacts.CONTENT_URI, 
      new String[]{ContactsContract.RawContacts.CONTACT_ID}, 
      ContactsContract.RawContacts.ACCOUNT_NAME + "= ?", 
      new String[]{accountName}, 
      null); 


    int contactIdColumn = rawCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID); 
    int rawCursorCount = rawCursor.getCount(); 


    Utils.Log("Account Name", accountName); 

    Utils.Log("Raw Size", " " + rawCursorCount); 
    rawCursor.moveToFirst(); 
    Long contactId = rawCursor.getLong(contactIdColumn); 


    phones = cResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      null, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND "+ContactsContract.RawContacts.ACCOUNT_NAME + "= ?", 
      new String[]{String.valueOf(contactId),accountName}, 
      null); 

    phones.moveToFirst(); 




    String isReadOnly= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.IS_READ_ONLY)); 
    Utils.Log("Raw Size", isReadOnly); 


} 

回答

3

你不必去了一個帳戶的聯繫人來檢查看看,你可以簡單地在設備上的SyncAdapters迭代,並檢查它們的屬性:

final SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes(); 
for (SyncAdapterType sync : syncs) { 
    Log.d(TAG, "found SyncAdapter: " + sync.accountType); 
    if (ContactsContract.AUTHORITY.equals(sync.authority)) { 
     Log.d(TAG, "SyncAdapter supports contacts: " + sync.accountType); 
     boolean readOnly = !sync.supportsUploading(); 
     Log.d(TAG, "SyncAdapter read-only mode: " + readOnly); 
     if (readOnly) { 
      // we'll now get a list of all accounts under that accountType: 
      Account[] accounts = AccountManager.get(this).getAccountsByType(sync.accountType); 
      for (Account account : accounts) { 
       Log.d(TAG, account.type + "/" + account.name); 
      } 
     } 
    } 
} 

希望這可以幫助。

+0

Thankyou非常多。 –

+0

我也想只與具有電話聯繫人的同步適配器一起使用這些帳戶。 –

+0

「只有手機通訊錄」是什麼意思?你的意思是特殊的聯繫人帳戶名爲「僅電話(未同步)」,如果你這樣做,它沒有SyncAdapter,因爲它是一個未初始帳戶 – marmor

相關問題