연락처 목록을 불러와 선택가능하게하는거
조회수 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 답변
-
저 예제 코드에서 뭐를 하려고 하는지 정확히는 모르겠지만 제가 이해한 바로는 일단
<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메소드를 오버라이딩해줍니다.
댓글 입력