안드로이드로 주소록을 받아오는 것을 해 보고 있다. 기본적으로 이름과 전화번호를 받아 오는것을 만들고 있다. 생각으로는 단체문자하는 어플을 만들고 싶어서 모바일로 등록되어 있는 것만을 가져오고 싶다. 책에서는 People클래스를 이용하는데 deprecated되었다네. 그래서 다른 방법을 찾아보다가 발견한 페이지. http://androiddevblog.blogspot.com/2010/02/query-contacts-data.html 그래서 따라서 해 보았다.
        Cursor contacts = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, "HAS_PHONE_NUMBER=1", null, null);
        MatrixCursor cursor = new MatrixCursor(new String[] {"_id", "name", "phone_number"});        startManagingCursor(cursor);
        if (contacts.moveToFirst()) {
        	String name;
        	String contactId;
        	int nameColumn = contacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
         	int idColumn = contacts.getColumnIndex(ContactsContract.Contacts._ID);
        	do {
        		name = contacts.getString(nameColumn);
        		contactId = contacts.getString(idColumn);
        		Cursor phones = getContentResolver().query(
        				ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        				null,
        				ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId + " AND " +
         				ContactsContract.CommonDataKinds.Phone.TYPE + "=" + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ,
        				null,
        				null);
        		if (phones.moveToNext()) {
        			String phoneNumber = phones
        			.getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    				cursor.addRow(new String[] {contactId, name, phoneNumber});
        		}
        		phones.close();
        	} while (contacts.moveToNext());
        }        contacts.close();
쿼리도 두 번 뿐이고 잘 된다. 왠지 조인으로 한번에 하면 될 쿼리를 나눠서 하느나 좀 신경쓰이긴 하지만. 근데 작업 도중 Contacts 를 통해 접근해야만 하는 줄 알았던 DISPLAY_NAME이 ContactsContract.CommonDataKinds.Phone.에도 있는것을 알았다. 음? 설마 하는 마음에 다음과 같이 해 보았다.


        Cursor cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
         		new String[]{ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
         			ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        			ContactsContract.CommonDataKinds.Phone.NUMBER},
        			ContactsContract.CommonDataKinds.Phone.TYPE + "=" + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, null, null);
        startManagingCursor(cursor);

잘 된다... 결과도 똑같아... 난 결국 뭘한거지.. ㅠㅠ 알아서 조인해 주는듯 하다. 

업뎃했으면서 변경된 사항도 예제랑 곁들여서 친절히 설명해주면 좋을것을...