0

私はリストからアカウント名をこのメソッドに渡しています。今私はこれらのアカウント名のうち連絡先のテーブルからのみ読み込まれているので、私は生のカーソルから連絡先IDを取得するためにカーソルを一度反復しているかを知りたい。 contact_idを取得した後、私は指定されたIDが読み取り専用かどうかを確認するために電話カーソルを使用していますが、私はそれを行うことができません。あなたはそれをチェックするために、アカウントの連絡先をオーバー行く必要はありません、あなたは、単にデバイス上SyncAdaptersを反復し、そのプロパティを確認することができます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

下記をご覧ください。

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

ありがとうございます。 –

+0

私はまた、電話連絡先のみを持つ同期アダプタを持つアカウントだけを取得したいと思います。 –

+0

「電話連絡先のみ」とはどういう意味ですか?同期されていないアカウントであるため、SyncAdapterはありません。 – marmor

関連する問題