Last active
November 10, 2015 12:15
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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