tarjeta - importar contactos android
Selector de contactos de Android con solo números de teléfono (2)
Sobre la base de la respuesta de Akash.
Paso 1 : es necesario agregar permisos de contacto de lectura / escritura en Manifest.
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- OR - depends on the requiremnts-->
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
Paso 2 : luego debe iniciar el intento del selector de contactos, pero antes debe verificar si se ha otorgado el permiso de contacto (solo para Android> = 23)
if (hasPermissions(Manifest.permission.READ_CONTACTS)) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, REQUEST_PICK_CONTACT);
} else {
// Request Permissions
}
Paso 3 - luego necesita obtener el resultado de la actividad
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_PICK_CONTACT) {
String phoneNo = null;
String name = null;
Uri uri = data.getData();
Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
if (cursor.moveToFirst()) {
int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
phoneNo = cursor.getString(phoneIndex);
name = cursor.getString(nameIndex);
Log.e("onActivityResult()", phoneIndex + " " + phoneNo + " " + nameIndex + " " + name);
}
cursor.close();
}
}
Y sí, eso es todo.
Descubrí en SO que para iniciar una versión filtrada del selector de contactos (que solo muestra los contactos que tienen números de teléfono), puedo usar esto:
Intent pickContactIntent = new Intent( Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI );
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, CONTACT_PICKER_RESULT);
Así que esto funciona. Estoy intentando averiguar cómo recuperar el nombre y el número de teléfono del contacto seleccionado ahora, dentro del método onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// what goes here...
}
He intentado varias cosas diferentes en onActivityResult, pero las consultas no devuelven el número.
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, 1);
String phoneNo = null;
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor.moveToFirst()) {
int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
phoneNo = cursor.getString(phoneIndex);
}
curosr.close();