uf, me tomó algún tiempo, pero creo que tengo la respuesta que necesita (incluso si es demasiado tarde, pero todavía post-it como referencia para otros).
En la aplicación que estoy desarrollando actualmente, el usuario puede ingresar un número de teléfono en y EditText
o hacer clic en un botón y seleccionar una persona de la libreta de direcciones de los teléfonos. si la persona tiene más de un número de teléfono, hay una lista desplegable donde puede seleccionar exactamente uno de ellos.
@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);
}
});
}
ahora, tan pronto como el usuario selecciona un contacto (y, probablemente, elige uno de varios números de teléfono), puede recuperar los datos de la forma habitual:
@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();
}
aquí está el documentation for CommonDataKinds.Phone for on dev.android.
el int "tipo" te dice el tipo de número: móvil (2), hogar (1), trabajo (3), y así sucesivamente.
nota: después de que el usuario selecciona el contacto, obtiene un girador de números sin indicación del tipo de números. eso no es realmente fácil de usar: si un contacto tiene 5 números asignados ... uh, ¿cuál de estos es el número de fax de nuevo?
otra nota: el ejemplo anterior necesita el sdk> 5 (Android 2.0+), entonces no 1.6 (= sdk 4). 1.6 tiene una api diferente, y si desea admitir ambas versiones, lea article about the contacts API on dev.android.
buena suerte.
exención de responsabilidad: He copiado la mayor parte de mi código de la PickContact.java example
Hola, ¿tiene alguna solución? Como también estoy buscando lo mismo. Solo puedo elegir un número de teléfono con 'nueva intención (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);' pero esa pantalla no muestra las fotos que necesito. – Vasu
revise este enlace http://stackoverflow.com/a/9798765/1282492 – Akiff