2016-08-02 104 views
0

我的目标是获取联系人的电话号码和电子邮件。 我试过使用一个游标,但不知何故,它返回的手机和电子邮件(两者之一,根据调整一些事情)相同的东西。我现在想要的是将电子邮件映射到电话号码或两个散列表,emailToID和IDToPhone的散列表。这是我迄今为止,但我使用的ID不是相同的跨参数([email protected]的电话是123,他们各自的ID是不一样的,不容易映射)。将感激的帮助!Android:如何通过电子邮件从联系人中获取号码?

public String getPhoneByEmail(String userEmail){ 
    final String EMAIL_URI =  ContactsContract.CommonDataKinds.Email.DATA; 
    final String PHONE_URI = ContactsContract.CommonDataKinds.Phone.NUMBER; 
    Hashtable<String, Integer> emailToId = new Hashtable<>(); 
    Hashtable<Integer, String> idToPhone = new Hashtable<>(); 
    ContentResolver cr = getContext().getContentResolver(); 

    Cursor cur1 = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
        null, 
        null, null); 
    Cursor cur2 = cr.query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        null, 
        null, null); 
    while (cur1.moveToNext()) { 
     String phone = cur1.getString(cur1.getColumnIndex(PHONE_URI)); 
     String id1 = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)); 
     idToPhone.put(Integer.parseInt(id1), phone); 
    } 
    while (cur2.moveToNext()) { 
     String email = cur2.getString(cur2.getColumnIndex(EMAIL_URI)); 
     String id2 = cur2.getString(cur2.getColumnIndex(ContactsContract.CommonDataKinds.Email._ID)); 
     emailToId.put(email, Integer.parseInt(id2)); 
    } 
    cur1.close(); 
    cur2.close(); 

    if (emailToId.get(userEmail)!=null){ 
     int id = emailToId.get(userEmail); 
     int newId = id - 2; 
     String phone = idToPhone.get(newId); 
     return phone; 
    } 
    else return "not found"; 
} 

回答

0

与帮助,得到它从这个:https://stackoverflow.com/a/4154729/6463084

private String getPhoneByEmail(String userEmail) { 
    Hashtable<String, String> emailToId = new Hashtable<>(); 
    Hashtable<String, String> idToPhone = new Hashtable<>(); 
    ContentResolver cr = getContext().getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while (cursor.moveToNext()) { 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
     String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
     if (hasPhone.equalsIgnoreCase("1")) 
      hasPhone = "true"; 
     else 
      hasPhone = "false"; 
     if (Boolean.parseBoolean(hasPhone)) { 
      Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); 
      while (phones.moveToNext()) { 
       String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       idToPhone.put(contactId, phoneNumber); 
      } 
      phones.close(); 
     } 
     Cursor emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
     while (emails.moveToNext()) { 
      String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
      emailToId.put(emailAddress, contactId); 
     } 
     emails.close(); 
    } 
    cursor.close(); 
    if (emailToId.get(userEmail) != null) { 
     String id = emailToId.get(userEmail); 
     if (idToPhone.get(id) != null) { 
      String phone = idToPhone.get(id); 
      return phone; 
     } 
    } 
    return "not found"; 
} 
0

试试这个代码读取联系人号码/姓名/电子邮件从电话..

public void storeContactsInLocal() { 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
    // retrieve all contacts as a cursor. 
    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, sortOrder); 

    //now we have cusror with contacts and get diffrent value from cusror. 
    String lastNumber = null; 

    while (cursor.moveToNext()) { 
     String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

     String number = phoneNumber.replaceAll("\\s+", ""); 

     if (!number.equals(lastNumber)) { 
      lastNumber = number; 

      try { 

       // Save Contact in Database! 


       String contactDetail = "Name :" + name + " : " + "Number :" + number+ " : " + "Email :" + email; 

       Log.e("Contact :", contactDetail); 


      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

现在从调用这个函数你活动像..

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

       Thread t = new Thread(new Runnable() { 
        @Override 
        public void run() { 
         storeContactsInLocal(); 
        } 
       }); 
       t.start(); 

     } 
    }, 100); 

只是不要忘记问/添加权限阅读联系人!

相关问题