2014-01-20 5 views
2

Edittext와 버튼을 사용하고 있습니다. 버튼을 누르면 전화 번호부가 열리고 사용자가 전화 번호부를 선택하면 선택한 전화 번호가 편집 문구에 표시됩니다. 많은 자습서를 따랐지만 보여주고있는 방법은 이미 가치가 떨어졌습니다.전화 번호부 연락처에 액세스하는 방법?

나는이 권한을 선언 : 매니페스트

에 READ_CONTACTS은 Digvesh 파텔에서 제공

답변

2
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contact_picker); 

     // this opens the activity. note the Intent.ACTION_GET_CONTENT 
     // and the intent.setType 
     ((Button)findViewById(R.id.pick_person)).setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // user BoD suggests using Intent.ACTION_PICK instead of .ACTION_GET_CONTENT to avoid the chooser 
       Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
       // BoD con't: CONTENT_TYPE instead of CONTENT_ITEM_TYPE 
       intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
       startActivityForResult(intent, 1);     
      } 
     }); 
    } 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (data != null) { 
     Uri uri = data.getData(); 

     if (uri != null) { 
      Cursor c = null; 
      try { 
       c = getContentResolver().query(uri, new String[]{ 
          ContactsContract.CommonDataKinds.Phone.NUMBER, 
          ContactsContract.CommonDataKinds.Phone.TYPE }, 
         null, null, null); 

       if (c != null && c.moveToFirst()) { 
        String number = c.getString(0); 
        int type = c.getInt(1); 
        showSelectedNumber(type, number); 
       } 
      } finally { 
       if (c != null) { 
        c.close(); 
       } 
      } 
     } 
    } 
} 

public void showSelectedNumber(int type, String number) { 
    Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();  
} 
+0

내가 READ_CONTACTS –

+0

이외의 다른 권한을 선언해야 할 예 유 –

+0

사람 –

0

대답이 정확합니다. 그는 숫자를 반환하는 "유형"의 접촉을 사용했습니다. 그래서 나는 그의 코드를 사용하고 나의 어플리케이션에서 사용했던 몇 가지 변경을했다. 그 사람에게 어쩌면 도움이

public int REQUESTCODE=1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button select = (Button) findViewById(R.id.select); 
    select.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
      startActivityForResult(intent, REQUESTCODE); 

     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (data != null) { 
     Uri uri = data.getData(); 
     Log.i("data", uri.toString()); 
     if (uri != null) { 
      Cursor c = null; 
      try { 
       c = getContentResolver().query(uri, new String[]{ 
         ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
          ContactsContract.CommonDataKinds.Phone.NUMBER, 
          ContactsContract.CommonDataKinds.Phone.TYPE }, 
         null, null, null); 

       if (c != null && c.moveToFirst()) { 
        String name = c.getString(0); 
        String number = c.getString(1); 
        int type = c.getInt(2); 

        showSelectedNumber(name, number,type); 
       } 
      } finally { 
       if (c != null) { 
        c.close(); 
       } 
      } 
     } 
    } 
} 

public void showSelectedNumber(String name, String number, int type){ 
    TextView usernumber = (TextView) findViewById(R.id.textView1); 
    String typelabel = (String) ContactsContract.CommonDataKinds.Phone.getTypeLabel(getResources(), type, ""); 
    usernumber.setText(name+": "+number+" "+typelabel); 

}