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

조회수 3463회

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

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);
    }
}

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

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메소드를 오버라이딩해줍니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)