Skip to content

Instantly share code, notes, and snippets.

@GigigoGreenLabs
Last active November 10, 2015 12:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GigigoGreenLabs/8edfedf2d73e563682f9 to your computer and use it in GitHub Desktop.
Save GigigoGreenLabs/8edfedf2d73e563682f9 to your computer and use it in GitHub Desktop.
Añadir contacto añadiendolo directamente en la agenda, y con un Intent sin necesidad de pedir permisos
import android.content.ContentProviderOperation;
import android.content.Context;
import android.provider.ContactsContract;
import android.util.Pair;
import java.util.ArrayList;
import java.util.List;
public class AddContactToContactDevice {
public enum ENUM_TYPE_PHONE {
MOBILE,
WORK,
HOME,
MAIN,
WORK_FAX,
HOME_FAX,
PAGER,
OTHER,
CUSTOM
}
private Context context;
private OnAddedContactListener onAddedContactListener;
public AddContactToContactDevice(Context context) {
this.context = context;
}
public void addContactToDevice(String fullName, List<Pair<ENUM_TYPE_PHONE, String>> phones, String email) {
ArrayList<ContentProviderOperation> cntProOper = new ArrayList<>();
int contactIndex = cntProOper.size();//ContactSize
//Newly Inserted contact
// A raw contact will be inserted ContactsContract.RawContacts table in contacts database.
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
//Display name will be inserted in ContactsContract.Data table
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, fullName)
.build());
//Mobile number will be inserted in ContactsContract.Data table
for (Pair<ENUM_TYPE_PHONE, String> phone : phones) {
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step 3
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone.second) // Number to be added
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getTypePhone(phone.first)).build()); //Type like HOME, MOBILE etc
}
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step 3
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email) // Number to be added
.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK).build()); //Type like HOME, MOBILE etc
try {
// We will do batch operation to insert all above data
//Contains the output of the app of a ContentProviderOperation.
//It is sure to have exactly one of uri or count set
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, cntProOper);
if (onAddedContactListener != null) {
onAddedContactListener.onAddedContact(true);
}
} catch (Exception exp) {
if (onAddedContactListener != null) {
onAddedContactListener.onAddedContact(false);
}
}
}
private int getTypePhone(ENUM_TYPE_PHONE typePhone) {
switch (typePhone) {
case MOBILE:
return ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
case WORK:
return ContactsContract.CommonDataKinds.Phone.TYPE_WORK;
case HOME:
return ContactsContract.CommonDataKinds.Phone.TYPE_HOME;
case MAIN:
return ContactsContract.CommonDataKinds.Phone.TYPE_MAIN;
case WORK_FAX:
return ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK;
case HOME_FAX:
return ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME;
case PAGER:
return ContactsContract.CommonDataKinds.Phone.TYPE_PAGER;
case OTHER:
return ContactsContract.CommonDataKinds.Phone.TYPE_OTHER;
case CUSTOM:
default:
return ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM;
}
}
public interface OnAddedContactListener {
void onAddedContact(boolean isAdded);
}
public void setOnAddedContactListener(OnAddedContactListener onAddedContactListener) {
this.onAddedContactListener = onAddedContactListener;
}
}
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Pair;
import java.util.List;
public class AddContactToDeviceIntent {
public enum ENUM_TYPE_PHONE {
MOBILE,
WORK,
HOME,
MAIN,
WORK_FAX,
HOME_FAX,
PAGER,
OTHER,
CUSTOM
}
private Context context;
public AddContactToDeviceIntent(Context context) {
this.context = context;
}
public void addContactToDevice(String fullName, List<Pair<ENUM_TYPE_PHONE, String>> phones, String email) {
Intent intentInsertEdit = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intentInsertEdit.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
if (!TextUtils.isEmpty(fullName)) {
intentInsertEdit.putExtra(ContactsContract.Intents.Insert.NAME, fullName);
}
int indexPhoneIntent = 0;
for (Pair<ENUM_TYPE_PHONE, String> phone : phones) {
switch (indexPhoneIntent) {
case 0:
intentInsertEdit.putExtra(ContactsContract.Intents.Insert.PHONE, phone.second)
.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, getTypePhone(phone.first));
indexPhoneIntent++;
break;
case 1:
intentInsertEdit.putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE, phone.second)
.putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, getTypePhone(phone.first));
indexPhoneIntent++;
break;
case 2:
intentInsertEdit.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, phone.second)
.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE, getTypePhone(phone.first));
indexPhoneIntent++;
break;
default:
break;
}
}
if (!TextUtils.isEmpty(email)) {
intentInsertEdit.putExtra(ContactsContract.Intents.Insert.EMAIL, email)
.putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
}
context.startActivity(intentInsertEdit);
}
private int getTypePhone(ENUM_TYPE_PHONE typePhone) {
switch (typePhone) {
case MOBILE:
return ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
case WORK:
return ContactsContract.CommonDataKinds.Phone.TYPE_WORK;
case HOME:
return ContactsContract.CommonDataKinds.Phone.TYPE_HOME;
case MAIN:
return ContactsContract.CommonDataKinds.Phone.TYPE_MAIN;
case WORK_FAX:
return ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK;
case HOME_FAX:
return ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME;
case PAGER:
return ContactsContract.CommonDataKinds.Phone.TYPE_PAGER;
case OTHER:
return ContactsContract.CommonDataKinds.Phone.TYPE_OTHER;
case CUSTOM:
default:
return ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM;
}
}
}
String fullName = contact.getFullName();
List<Pair<AddContactToDeviceIntent.ENUM_TYPE_PHONE, String>> phonesList = new ArrayList<>();
if (!TextUtils.isEmpty(contact.getLongPhone())) {
phonesList.add(new Pair<>(AddContactToDeviceIntent.ENUM_TYPE_PHONE.WORK, contact.getLongPhone()));
}
if (!TextUtils.isEmpty(contact.getShortPhone())) {
phonesList.add(new Pair<>(AddContactToDeviceIntent.ENUM_TYPE_PHONE.WORK, contact.getShortPhone()));
}
if (!TextUtils.isEmpty(contact.getLongMobile())) {
phonesList.add(new Pair<>(AddContactToDeviceIntent.ENUM_TYPE_PHONE.MOBILE, contact.getLongMobile()));
}
if (!TextUtils.isEmpty(contact.getShortMobile())) {
phonesList.add(new Pair<>(AddContactToDeviceIntent.ENUM_TYPE_PHONE.MOBILE, contact.getShortMobile()));
}
String email = contact.getEmail();
AddContactToDeviceIntent addContactToDeviceIntent = new AddContactToDeviceIntent(this);
addContactToDeviceIntent.addContactToDevice(fullName, phonesList, email);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment