2014-01-20 4 views
2

Я использую Edittext и кнопку. При нажатии кнопки телефонная книга открывается, а затем пользователь выбирает контакт из нее, и выбранный номер звонка будет отображаться на edittext. Я следил за многими учебниками, но методы, которые они показывают, уже обесценились.Как получить доступ к контактам телефонной книги?

Я предрек это разрешение: READ_CONTACTS в манифесте

ответ

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

Ответ предоставляется Digvesh Patel правильно. Он использовал «тип» контакта, который возвращает число. поэтому я использовал его код и внес некоторые изменения, которые я использовал в своем приложении. это может быть полезным для кого-то

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

} 
Смежные вопросы