2016-04-07 9 views
1

この選択句は、私が欲しいものである電話番号を、持っているだけでそれらの連絡先を返します。連絡先に対応する名前の電話番号を取得するにはどうすればよいですか?私のカーソルのクエリで

// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 

マイ全体カーソル問合せは次のようになります。

// this query only return contacts with phone number and is not duplicated 
     phones = getContentResolver().query(
//    the table to query 
       ContactsContract.Contacts.CONTENT_URI, 
//    the columns to return 
       null, 
//    selection criteria : 
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 
//    selection criteria 
       null, 
//    display in ascending order 
       ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

しかし、どのようにすることができます連絡先ごとにの電話番号が実際に届きますか?上のコードに何かを追加することはできますか、新しいCursorクエリを開始する必要はありますか?

私はそれが後者だと思います。

私は出発点として、新たなカーソルクエリを開始しました:(!私が欲しいもの、正しい)

phonestwo = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "=1", 
          null, 
          null); 

しかし、logcatでログに私は携帯電話のカーソルを取得していますが134件のレコードを持っていると私のphonestwoカーソルは196を持っています記録。要するに、134のレコードに対応する電話番号を取得するにはどうすればよいですか?

答えて

0
public class MainActivity extends Activity { 


    Cursor cursor; 
    ListView mainListView; 
    ArrayList hashMapsArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (cursor != null) { 
      cursor.moveToFirst();} 
     try { 

      cursor = getApplicationContext().getContentResolver() 
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
      int Idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 
      int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

      int phoneNumberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      int photoIdIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI); 
      cursor.moveToFirst(); 


      Set<String> ids = new HashSet<>(); 
      do { 
       System.out.println("=====>in while"); 
       String contactid=cursor.getString(Idx); 
       if (!ids.contains(contactid)) { 
        ids.add(contactid); 
        HashMap<String, String> hashMap = new HashMap<String, String>(); 
        String name = cursor.getString(nameIdx); 
        String phoneNumber = cursor.getString(phoneNumberIdx); 
        String image = cursor.getString(photoIdIdx); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Number--->"+phoneNumber); 

        if (!phoneNumber.contains("*")) { 
         hashMap.put("contactid", "" + contactid); 
         hashMap.put("name", "" + name); 
         hashMap.put("phoneNumber", "" + phoneNumber); 
         hashMap.put("image", "" + image); 
         // hashMap.put("email", ""+email); 
         if (hashMapsArrayList != null) { 
          hashMapsArrayList.add(hashMap);} 
//     hashMapsArrayList.add(hashMap); 
        } 
       } 

      } while (cursor.moveToNext()); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
} 
} 
を第一には、連絡先のIDの phonesカーソルを尋ねる

1

連絡先に関連付けられた電話番号を取得するには、連絡先コンテンツプロバイダに再度連絡する必要があります。

String phoneContactId = phones.getString(phones.getColumnIndexOrThrow(BaseColumns._ID)); 

そして、すべてのphoneContactIdのために、あなたはそのすべての関連する電話番号の取得 - -

Cursor pCur = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { phoneContactId }, null); 

while (pCur.moveToNext()) { 
        int phoneType = pCur.getInt(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE)); 
        String phoneNumber = pCur 
          .getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       }