<uses-permission android:name="android.permission.READ_CONTACTS" />
public class ContactsManager {
private final int CONTACT_PICKER_RESULT = 898;
private Activity activity;
public ContactsManager(Activity activity){
this.activity = activity;
}
public void selectContact(){
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
this.activity.startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
}
/**
* Llamada en el ActivityResult de nuestra activity para obtener el email del usuario
*/
public void onActivityResult(int requestCode, int resultCode, Intent data, onSelectedEmail onSelectedEmailHandler){
if(requestCode == CONTACT_PICKER_RESULT){
if (resultCode == Activity.RESULT_OK) {
Cursor cursor = null;
String email = "";
try {
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = this.activity.getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[] { id }, null);
int emailIdx = cursor.getColumnIndex(Email.DATA);
if (cursor.moveToFirst())
email = cursor.getString(emailIdx);
} catch (Exception e) {
} finally {
if (cursor != null)
cursor.close();
if (email.length() == 0)
onSelectedEmailHandler.onFailure();
else
onSelectedEmailHandler.onSuccess(email);
}
} else {
onSelectedEmailHandler.onFailure();
}
}
}
public interface onSelectedEmail{ void onSuccess(String email); void onFailure();};
}
El método onActivityResult de nuestra clase va a recibir los parámetros del método onActivityResult de la Activity. Todo esto se puede hacer en una Activity, pero hacerlo así simplifica bastante el código en la Activity y lo podemos utilizar de una forma más cómoda en donde lo necesitemos.
En este método verificaremos que el requestCode es CONTACT_PICKER_RESULT y que el resultCode ha devuelto el valor definido para RESULT_OK.
Para evaluar el resultado, en una variable tipo Uri, le asignamos el resultado de nuestra selección data. Este nos ayudará a obtener el id del usuario, el cual mediante una consulta almacenamos en un Cursor todos los emails que pueda tener el usuario.
En la Activity que utilicéis esta clase podéis obtar por utilizar un botón o cualquier otro método que mediante un click o otra acción abra la libreta. De momento declaramos una variable para nuestra clase en el ambito de la Activity.
private ContactsManager contacts;
@Override
public void onCreate(Bundle savedInstanceState) {
contacts = new ContactsManager(this);
//Este es un botón que debeis declarar, puede ser cualquier otro elemento que vosotros querais.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
contacts.selectContact();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
contacts.onActivityResult(requestCode, resultCode, data, new onSelectedEmail() {
@Override
public void onSuccess(String email) {
//Sustituid HolaMundoActivity por el nombre de vuestra Activity
Toast.makeText(HolaMundoActivity.this, "email " + email, Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure() {
//Implementar el proceso correspondiente en caso de fallo
}
});
}