2011-04-22 4 views
4

지금 전화 번호를 검색하고 editText의 텍스트를 해당 번호로 설정할 수 있습니다. 그러나 성이나 성을 얻으려고하면 제대로 작동하지 않습니다. 내가 주석 처리 한 것에 주목하십시오. Heres는연락처 선택기, 성, 이름, 전화 번호 검색

내 코드 :

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class main extends Activity { 

    private static final int CONTACT_PICKER_RESULT = 1001; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button getContacts = (Button)findViewById(R.id.getContacts); 
     getContacts.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
       startActivityForResult(i, CONTACT_PICKER_RESULT); 

      } 
     }); 
    } 
    protected void onActivityResult(int reqCode, int resultCode, Intent data) { 
     super.onActivityResult(reqCode, resultCode, data); 
     if(resultCode == RESULT_OK) { 
      switch (reqCode) { 
      case CONTACT_PICKER_RESULT: 
       Cursor cursor = null; 
       String number = ""; 
       String lastName =""; 
       try { 

        Uri result = data.getData(); 

        //get the id from the uri 
        String id = result.getLastPathSegment(); 

        //query 
        cursor = getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone._ID + " = ? " , new String[] {id}, null); 

//     cursor = getContentResolver().query(Phone.CONTENT_URI, 
//       null, Phone.CONTACT_ID + "=?", new String[] { id }, 
//       null); 

        int numberIdx = cursor.getColumnIndex(Phone.DATA); 

        if(cursor.moveToFirst()) { 
         number = cursor.getString(numberIdx); 
         //lastName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); 
        } else { 
         //WE FAILED 
        } 
       } catch (Exception e) { 
        //failed 
       } finally { 
        if (cursor!=null) { 
         cursor.close(); 
        } 
        EditText numberEditText = (EditText)findViewById(R.id.number); 
        numberEditText.setText(number); 
        //EditText lastNameEditText = (EditText)findViewById(R.id.last_name); 
        //lastNameEditText.setText(lastName); 

       } 

      } 
     } 
+0

무엇이 문제인가? 정확히 작동하지 않는 것은 무엇입니까? – Michael

+0

이름과 성을 별도로 알고 싶은 분은 다음을 참조하십시오 : http://stackoverflow.com/questions/4301064/how-to-get-the-firstname-and-lastname-from-android-contacts Krzysztof의 대답은 특히 유용했습니다. 나를. –

답변

6

이 내가 표시 이름을 가지고 어떻게 ...

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
     case CONTACT_PICKER_RESULT: 
      Cursor cursor = null; 

      try { 
       Uri result = data.getData(); 
       String id = result.getLastPathSegment(); 

       //Get Name 
       cursor = getContentResolver().query(result, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       } catch (Exception e) { } 
     } 
    } 
} 

이 도움이 :) 희망

+0

감사! 그리고 성을 어떻게 얻을 수 있습니까? 또는 이름? – LuxuryMode

+0

이것은 성과 이름을 모두 가져옵니다. –

+0

하지만 저는 성과 이름이 따로 필요합니다. ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME 및 ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME이 (가) 작동해야하지만 그게 내가 문제가되는 부분입니다. – LuxuryMode

1

당신이 당신의 연락처 ID가있는 경우 이 메서드를 사용하여 다른 연락처 데이터를 모두 검색 할 수 있습니다.

Map<String, String> result = new HashMap<>(); 
Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "='" + YOUR_CONTACT_ID + "'", null, null); 
if (cursor != null) { 
    while (cursor.moveToNext()) { 
     String mime = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)); 
     switch (mime) { 
      case ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE: 
       result.put(FIRST_NAME, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME))); 
       result.put(LAST_NAME, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME))); 
       break; 
      case ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE: 
       result.put(CITY, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY))); 
       result.put(STREET, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET))); 
       result.put(ZIP, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE))); 
       break; 
      case ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE: 
       if (ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE == cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))) { 
        result.put(MOBILE, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
       } 
       break; 
     } 
    } 
    cursor.close(); 
} 
return result; 
관련 문제