연락처 목록을 불러와 선택가능하게하는거


제가 앱에서 연락처 목록을 불러와서 선택하게끔하고싶은데 구글링해서 소스를 하나 찾았어요. 근데 이건 제대로 동작하지 않아요.

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class Contacts extends ListActivity {

    private ListAdapter mAdapter;
    public TextView pbContact;
    public static String PBCONTACT;
    public static final int ACTIVITY_EDIT=1;
    private static final int ACTIVITY_CREATE=0;

    // Called when the activity is first created. 
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        startManagingCursor(C);

        String[] columns = new String[] {People.NAME};
        int[] names = new int[] {R.id.row_entry};

        mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
        setListAdapter(mAdapter);
    } // end onCreate()
    // Called when contact is pressed
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Cursor C = (Cursor) mAdapter.getItem(position);
        PBCONTACT = C.getString(C.getColumnIndex(People.NAME));

        // RHS 05/06
        //pbContact = (TextView) findViewById(R.id.myContact);
        //pbContact.setText(new StringBuilder().append("b"));

        Intent i = new Intent(this, NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }
}

제가 원하는건 연락처 목록에서 연락처를 선택하고 확인을 누르면 해당 연락처의 이름을 받아오는거에요. 어떻게 하면 좋을까요?

  • 2016년 02월 11일에 작성됨

조회수 367


1 답변


좋아요
0
싫어요
채택취소하기

저 예제 코드에서 뭐를 하려고 하는지 정확히는 모르겠지만 제가 이해한 바로는 일단 <uses-permission android:name="android.permission.READ_CONTACTS"/> 매니페스트파일에 퍼미션을 등록해줍니다.

그리고 연락처를 선택할수있는 contact Picker를 호출합니다. Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

startActivityForResult(intent, PICK_CONTACT); 를 해줘서 결과를 받아오는 액티비티를 호출합니다. PICK_CONTACT는 예제고 아무 상수를 지정해주시면됩니다.

그리고 content Picker를 호출하는 액티비티에서

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);

  switch (reqCode) {
    case (PICK_CONTACT) :
      if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c =  getContentResolver().query(contactData, null, null, null, null);
        if (c.moveToFirst()) {
          String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          // TODO 연락처의 이름을 받아와 원하는 처리를해준다. 
        }
      }
      break;
  }
}

결과를 받아와 처리하는 onActivityResult메소드를 오버라이딩해줍니다.

  • 2016년 02월 11일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close