2017-01-26 5 views
0

나는 이메일 주소를 얻기 위해이 방법을 사용 :Gmail에서 등록 된 모든 이메일 주소를 검색하는 방법은 무엇입니까?

ContentResolver cr = SelectFile.this.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)); 
         String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         ItemEmailSuggestion item = new ItemEmailSuggestion(email,name,id); 
         emailsContacts.add(item); 
         Log.i("CONTACTS",email+" "+name); 
        } 
        cur1.close(); 
       } 
      } 

(소스 Get only email address from contact list Android)

을 EDITTEXT의 입력에 따라 메일의 목록을 제시하기 위해.

내 구현은 작동하지만 Gmail 애플리케이션에 등록 된 메일에 비해 얻은 메일 주소 목록이 훨씬 적습니다.

왜?

물론 권한이 올바르게 부여됩니다 (READ_CONTACT).

저는 불행히도 kitkat 아래에 터미널이 없지만 이것이 사실이 아니며 목록이 Gmail과 비슷하다는 것을 기억합니다.

현재 Android 21,22,23,24에서 테스트를 마쳤습니다. 그것이 작동하는 경우

답변

0

없음 장치에 저장된 모든 이메일이 이름을 가진 실제 접촉에 속하는 사전에 감사합니다, 당신은 이메일 테이블에서 직접 모든 이메일에 대한 쿼리 시도하고, 당신이의 이름을 기입 할 수 있습니다 두 번째 쿼리에 이름이있는 쿼리

 cr.query(Email.CONTENT_URI,null, null, null, null); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String email = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       Log.i("CONTACTS",email); 
      } 
      cur.close(); 
     }