Filter Contacts Except Groups Of Account Type
I need to build a contact picker which list all phone's contact except an account type of contact. I did follow this way : Example the account type I want to remove from the list i
Solution 1:
I resolved by myself. I did flow this way :
public Cursor getContactGroupIDs(String acountType, Context context){
StringsortOrder= ContactsQuery.COLUMN_NAME + " COLLATE LOCALIZED ASC";
Cursorcursor= context.getContentResolver().query(ContactsQuery.CONTENT_URI,
ContactsQuery.PROJECTION, ContactsQuery.SELECTION , null, sortOrder);
return cursor;
}
privatebooleanisAccountType(Context context, String accountType, long id){
Cursorcursor= context.getContentResolver().query(RawContactsQuery.CONTENT_URI,
RawContactsQuery.PROJECTION, RawContactsQuery.SELECTION , newString[]{id + "", accountType}, null);
booleanresult= cursor.getCount() > 0;
cursor.close();
return result;
}
public List<PickerContactRow> getContactExceptGroup(Context context, String accountType){
List<PickerContactRow> result = newArrayList<PickerContactRow>();
Cursorcursor=this.getContactGroupIDs(accountType, context);
EmailValidatorvalidator=newEmailValidator();
intindexOfContactId= cursor.getColumnIndex(ContactsQuery.COLUMN_CONTACT_ID);
intindexOfName= cursor.getColumnIndex(ContactsQuery.COLUMN_NAME);
finalintcolumnGroup= cursor.getColumnIndex(ContactsQuery.DELETED);
while (cursor.moveToNext()) {
longid= cursor.getLong(indexOfContactId);
if (!isAccountType(context, accountType, id))
{
//seen.add(contactID);PickerContactRowcontactRow=newPickerContactRow();
contactRow.setId(id);
contactRow.setName(cursor.getString(indexOfName));
Log.v(TAG, "row : " + contactRow
+ " value : " + cursor.getString(columnGroup));
result.add(contactRow);
}
}
cursor.close();
return result;
}
finalpublicstaticclassContactsQuery {
privateContactsQuery() {
}
publicstaticfinalStringCOLUMN_NAME= Contacts.DISPLAY_NAME;
publicstaticfinalStringCOLUMN_ID= Contacts._ID;
publicstaticfinalStringDELETED= Contacts.HAS_PHONE_NUMBER;
publicstaticfinalStringCOLUMN_CONTACT_ID= Contacts._ID;
publicstaticfinalUriCONTENT_URI= Contacts.CONTENT_URI;
publicstaticfinalStringSELECTION= COLUMN_NAME + " NOTNULL"
+ ") AND (" + COLUMN_NAME + " !=''"
+ ") AND (" + Contacts.HAS_PHONE_NUMBER + " =1";
publicstaticfinal String[] PROJECTION =
newString[] {COLUMN_NAME, COLUMN_CONTACT_ID, DELETED};
}
finalpublicstaticclassRawContactsQuery {
privateRawContactsQuery() {
}
publicstaticfinalStringACCOUNT_TYPE= RawContacts.ACCOUNT_TYPE;
publicstaticfinalStringCOLUMN_CONTACT_ID= RawContacts.CONTACT_ID;
publicstaticfinalUriCONTENT_URI= RawContacts.CONTENT_URI;
publicstaticfinalStringSELECTION= COLUMN_CONTACT_ID + "=?) AND (" + ACCOUNT_TYPE + " =?";
publicstaticfinal String[] PROJECTION =
newString[] {COLUMN_CONTACT_ID};
}
I see it quite slow, but I couldn't find out other approach.
Post a Comment for "Filter Contacts Except Groups Of Account Type"