Android 如何在使用CursorLoader时仅获取包含电子邮件的联系人

Android 如何在使用CursorLoader时仅获取包含电子邮件的联系人,android,android-contacts,Android,Android Contacts,我正在尝试从具有电子邮件地址的设备获取所有联系人。 现在我的代码(如下)获得了所有联系人,我需要添加什么才能只获得电子邮件联系人 final static String SELECTION = Contacts.DISPLAY_NAME_PRIMARY + "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1"; final static String[] PROJECTION = { Contacts._ID

我正在尝试从具有电子邮件地址的设备获取所有联系人。 现在我的代码(如下)获得了所有联系人,我需要添加什么才能只获得电子邮件联系人

final static String SELECTION = Contacts.DISPLAY_NAME_PRIMARY + "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1";

final static String[] PROJECTION = {
            Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME_PRIMARY , Contacts.PHOTO_THUMBNAIL_URI, SORT_ORDER, Contacts.SORT_KEY_PRIMARY
        };    

  new CursorLoader(getActivity(),
          Contacts.CONTENT_URI,
          ContactsQuery.PROJECTION,
          ContactsQuery.SELECTION,
          null,
          Contacts.SORT_KEY_PRIMARY);
final static String SELECTION=Contacts.DISPLAY\u NAME\u PRIMARY+“''+”和“+Contacts.IN\u VISIBLE\u GROUP+”=1”;
最终静态字符串[]投影={
联系人。\ ID,Contacts.LOOKUP\键,Contacts.DISPLAY\名称\主联系人,Contacts.PHOTO\缩略图\ URI,排序\顺序,Contacts.SORT\键\主联系人
};    
新游标加载程序(getActivity(),
Contacts.CONTENT_URI,
接触式投影,
联系方式选择,
无效的
联系人。排序键(主);

试试这个

public ArrayList<String> getNameEmailDetails(){
        ArrayList<String> names = new ArrayList<String>();
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor cur1 = cr.query( 
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                new String[]{id}, null); 
                while (cur1.moveToNext()) { 
                    //to get the contact names
                    String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    Log.e("Name :", name);
                    String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    Log.e("Email", email);
                    if(email!=null){
                        names.add(name);
                    }
                } 
                cur1.close();
            }
        }
        return names;
    }

从cur1中,您可以获得所有具有电子邮件ID的联系人。

检查此项,请提供一些解释。硬编码的答案肯定会让votesThanks失望,但我需要在我的代码中做一个过滤器,而不是获取所有联系人然后检查它们(这就是我现在所做的)@Nabin我现在已经给出了解释,为什么会被否决?你能再解释一下你的要求吗@User733284您在回答后询问要求?
Cursor cur1 = cr.query( 
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                    new String[]{id}, null);