代码之家  ›  专栏  ›  技术社区  ›  Afzal

Android:从联系人中检索姓名、电话号码、电子邮件、生日

  •  0
  • Afzal  · 技术社区  · 7 年前

    我只得到了名字&生日使用下面的代码。但我需要电话号码&同时发送电子邮件。如果有人能帮我,那太好了。谢谢

    private void getContacts() {
        Uri uri = ContactsContract.Data.CONTENT_URI;
    
        String[] projection = new String[]{
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Event.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Email.DATA,
                ContactsContract.CommonDataKinds.Event.START_DATE
        };
    
        String where = ContactsContract.Data.MIMETYPE + "= ? AND " +
                ContactsContract.CommonDataKinds.Event.TYPE + "=" +
                ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
        String[] selectionArgs = new String[]{
                ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
        };
        String sortOrder = null;
        ContentResolver contentResolver = this.getActivity().getContentResolver();
        Cursor cursor = contentResolver.query(uri, projection, where, selectionArgs, sortOrder);
    
        int nameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
        int numberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
        int emailColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
        int bithDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
        while (cursor.moveToNext()) {
            String name = cursor.getString(nameColumn);
            String number = cursor.getString(numberColumn);
            String email = cursor.getString(emailColumn);
            String birthDay = cursor.getString(bithDayColumn);
            Log.d(TAG, "Birthday: " + birthDay);
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   srn17 marmor    7 年前

    在投影中,您将查询限制为MIMETYPE行 CommonDataKinds.Event.CONTENT_ITEM_TYPE 只有,所以你只能过生日。

    你需要询问电子邮件和手机的模拟类型,但请注意,这些附加信息将在同一联系人的不同行中提供。

    以下是简单的代码,可以帮助您开始,打印出结果哈希图,您将获得每个联系人的所有姓名、电子邮件、电话和生日:

    Map<Long, List<String>> contacts = new HashMap<Long, List<String>>();
    
    String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3};
    
    // query only emails/phones/events
    String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "', '" + Event.CONTENT_ITEM_TYPE"', '" + Email.CONTENT_ITEM_TYPE + "')";
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null);
    
    while (cur != null && cur.moveToNext()) {
        long id = cur.getLong(0);
        String name = cur.getString(1); // full name
        String mime = cur.getString(2); // type of data (phone / birthday / email)
        String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234
    
        String kind = "unknown";
    
        switch (mime) {
            case Phone.CONTENT_ITEM_TYPE: 
                kind = "phone"; 
                break;
            case Event.CONTENT_ITEM_TYPE: 
                kind = "birthday";
                break;
            case Email.CONTENT_ITEM_TYPE: 
                kind = "email";
                break;
        }
        Log.d(TAG, "got " + id + ", " + name + ", " + kind + " - " + data);
    
        // add info to existing list if this contact-id was already found, or create a new list in case it's new
        List<String> infos;
        if (contacts.containsKey(id)) {
            infos = contacts.get(id);
        } else {
            infos = new ArrayList<String>();
            infos.add("name = " + name);
            contacts.put(id, infos);
        }
        infos.add(kind + " = " + data);
    }