|
|
|
|
@@ -1,5 +1,7 @@
|
|
|
|
|
package com.vscool.os.utils;
|
|
|
|
|
|
|
|
|
|
import android.content.ContentProviderOperation;
|
|
|
|
|
import android.content.ContentProviderResult;
|
|
|
|
|
import android.content.ContentResolver;
|
|
|
|
|
import android.content.ContentUris;
|
|
|
|
|
import android.content.ContentValues;
|
|
|
|
|
@@ -41,82 +43,24 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
|
|
|
|
|
public class ContactsUtils {
|
|
|
|
|
private static final String TAG = "ContactsUtils";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void saveContactPhone(Context context, List<Contact> contactList) {
|
|
|
|
|
Log.e(TAG, "saveContactPhone: ");
|
|
|
|
|
// List<ContactId> contactIdList = ContactsUtils.getLocalContacts(context);
|
|
|
|
|
public static void saveContactPhone(Context context, Contact contact) {
|
|
|
|
|
Observable.create(new ObservableOnSubscribe<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void subscribe(@NonNull ObservableEmitter<Long> emitter) throws Throwable {
|
|
|
|
|
for (Contact contact : contactList) {
|
|
|
|
|
if (TextUtils.isEmpty(contact.getMobile())) {
|
|
|
|
|
continue;
|
|
|
|
|
Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
|
|
|
|
|
Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget<Bitmap>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
|
|
|
|
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
|
|
|
|
updateContactPhone(context, contact, resource);
|
|
|
|
|
} else {
|
|
|
|
|
insertContactPhone(context, contact, resource);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
|
|
|
|
long rawContactId = ContactsUtils.getContactId(context, contact.getMobile());
|
|
|
|
|
Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget<Bitmap>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
ContentValues nameValues = new ContentValues();
|
|
|
|
|
//add Name
|
|
|
|
|
nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
|
|
|
|
|
nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
|
|
|
|
|
resolver.update(ContactsContract.Data.CONTENT_URI, nameValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
|
|
|
|
|
|
|
|
|
|
ContentValues photoValues = new ContentValues();
|
|
|
|
|
photoValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
resource.compress(Bitmap.CompressFormat.PNG, 100, out);
|
|
|
|
|
photoValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
|
|
|
|
|
photoValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
|
|
|
|
|
resolver.update(ContactsContract.Data.CONTENT_URI, photoValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
|
|
|
|
|
|
|
|
|
|
ContentValues phoneValues = new ContentValues();
|
|
|
|
|
phoneValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
phoneValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
|
|
|
|
|
phoneValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
|
|
|
|
|
phoneValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
|
|
|
|
resolver.update(ContactsContract.Data.CONTENT_URI, phoneValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
|
long rawContactId = ContentUris.parseId(context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values));
|
|
|
|
|
Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget<Bitmap>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
ContentValues nameValues = new ContentValues();
|
|
|
|
|
//add Name
|
|
|
|
|
nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
|
|
|
|
|
nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, nameValues);
|
|
|
|
|
|
|
|
|
|
ContentValues photoValues = new ContentValues();
|
|
|
|
|
photoValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
resource.compress(Bitmap.CompressFormat.PNG, 100, out);
|
|
|
|
|
photoValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
|
|
|
|
|
photoValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, photoValues);
|
|
|
|
|
|
|
|
|
|
ContentValues phoneValues = new ContentValues();
|
|
|
|
|
phoneValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
phoneValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
|
|
|
|
|
phoneValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
|
|
|
|
|
phoneValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, phoneValues);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
emitter.onNext(1L);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.subscribeOn(Schedulers.io())
|
|
|
|
|
}).subscribeOn(Schedulers.io())
|
|
|
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
.subscribe(new Observer<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
@@ -141,6 +85,275 @@ public class ContactsUtils {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void saveContactPhone(Context context, List<Contact> contactList) {
|
|
|
|
|
Log.e(TAG, "saveContactPhone: ");
|
|
|
|
|
// List<ContactId> contactIdList = ContactsUtils.getLocalContacts(context);
|
|
|
|
|
Observable.create(new ObservableOnSubscribe<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void subscribe(@NonNull ObservableEmitter<Long> emitter) throws Throwable {
|
|
|
|
|
for (Contact contact : contactList) {
|
|
|
|
|
if (TextUtils.isEmpty(contact.getMobile())) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
|
|
|
|
|
Glide.with(context).asBitmap().load(contact.getAvatar()).error(R.drawable.default_avatar).override(200, 200).into(new SimpleTarget<Bitmap>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
|
|
|
|
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
|
|
|
|
updateContactPhone(context, contact, resource);
|
|
|
|
|
emitter.onNext(0L);
|
|
|
|
|
} else {
|
|
|
|
|
insertContactPhone(context, contact, resource);
|
|
|
|
|
emitter.onNext(1L);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}).subscribeOn(Schedulers.io())
|
|
|
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
.subscribe(new Observer<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onSubscribe(@NonNull Disposable d) {
|
|
|
|
|
Log.e("saveContactPhone", "onSubscribe: ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNext(@NonNull Long aLong) {
|
|
|
|
|
Log.e("saveContactPhone", "onNext: " + aLong);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onError(@NonNull Throwable e) {
|
|
|
|
|
Log.e("saveContactPhone", "onError: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onComplete() {
|
|
|
|
|
Log.e("saveContactPhone", "onComplete: ");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void insertContactPhone(Context context, Contact contact, Bitmap bitmap) {
|
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
|
long rawContactId = ContentUris.parseId(context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values));
|
|
|
|
|
Log.e(TAG, "insertContactPhone: rawContactId = " + rawContactId);
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
|
|
|
|
|
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
values.clear();
|
|
|
|
|
|
|
|
|
|
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
|
|
|
|
|
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
values.clear();
|
|
|
|
|
|
|
|
|
|
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void updateContactPhone(Context context, Contact contact, Bitmap bitmap) {
|
|
|
|
|
long rawContactId = ContactsUtils.getRawContactId(context, contact.getMobile());
|
|
|
|
|
Log.e(TAG, "updateContactPhone: rawContactId = " + rawContactId);
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
|
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
|
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
values.clear();
|
|
|
|
|
|
|
|
|
|
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
|
|
|
|
|
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
|
|
|
|
|
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
values.clear();
|
|
|
|
|
|
|
|
|
|
// values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
// values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
|
|
|
|
|
// values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
|
|
|
|
|
// values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
|
|
|
|
// resolver.insert(ContactsContract.Data.CONTENT_URI, values);
|
|
|
|
|
|
|
|
|
|
// Log.e(TAG, "updateContactPhone: phoneValues = " +
|
|
|
|
|
// resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data.RAW_CONTACT_ID + "='" + rawContactId+"'", null));
|
|
|
|
|
|
|
|
|
|
// String selection = ContactsContract.Data.CONTACT_ID + "=" + contacts.getContactId() + " AND " + Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'";
|
|
|
|
|
// ContentValues values = new ContentValues();
|
|
|
|
|
// values.put(StructuredName.DISPLAY_NAME, contacts.getName()); // make sure getName() returns a String!!!
|
|
|
|
|
// getContentResolver().update(Data.CONTENT_URI, values, selection, null);
|
|
|
|
|
|
|
|
|
|
// ContentValues values = new ContentValues();
|
|
|
|
|
// values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
|
|
|
|
|
// values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
|
|
|
|
|
// Log.d("updateContact", "values已经产生");
|
|
|
|
|
// int result = resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(bean.getId())});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void update(Context context, Contact contact, Bitmap bitmap) {
|
|
|
|
|
long rawContactId = ContactsUtils.getRawContactId(context, contact.getMobile());
|
|
|
|
|
|
|
|
|
|
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
|
|
|
|
|
ContentProviderOperation op1 = ContentProviderOperation
|
|
|
|
|
.newUpdate(ContactsContract.Data.CONTENT_URI)
|
|
|
|
|
.withSelection(
|
|
|
|
|
ContactsContract.Data.RAW_CONTACT_ID + "=? and "
|
|
|
|
|
+ ContactsContract.Data.MIMETYPE + "=?",
|
|
|
|
|
new String[]{
|
|
|
|
|
String.valueOf(rawContactId),
|
|
|
|
|
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE})
|
|
|
|
|
.withValue(
|
|
|
|
|
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,// 对应data表中的data1字段
|
|
|
|
|
contact.getName()).build();
|
|
|
|
|
ops.add(op1);
|
|
|
|
|
|
|
|
|
|
ContentProviderOperation op2 = ContentProviderOperation
|
|
|
|
|
.newUpdate(ContactsContract.Data.CONTENT_URI)
|
|
|
|
|
.withSelection(
|
|
|
|
|
ContactsContract.Data.RAW_CONTACT_ID + "=? and "
|
|
|
|
|
+ ContactsContract.Data.MIMETYPE + "=?",
|
|
|
|
|
new String[]{String.valueOf(rawContactId),
|
|
|
|
|
ContactsContract.CommonDataKinds.Phone.MIMETYPE})
|
|
|
|
|
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,// 对应data表中的data1字段
|
|
|
|
|
contact.getMobile()).build();
|
|
|
|
|
ops.add(op2);
|
|
|
|
|
|
|
|
|
|
// ContentProviderOperation op3 = ContentProviderOperation
|
|
|
|
|
// .newUpdate(ContactsContract.Data.CONTENT_URI)
|
|
|
|
|
// .withSelection(
|
|
|
|
|
// ContactsContract.Data.RAW_CONTACT_ID + "=? and "
|
|
|
|
|
// + ContactsContract.Data.MIMETYPE + "=?",
|
|
|
|
|
// new String[]{String.valueOf(rawContactId),
|
|
|
|
|
// ContactsContract.CommonDataKinds.Phone.MIMETYPE})
|
|
|
|
|
// .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS,// 对应data表中的data1字段
|
|
|
|
|
// "test@email.com").build();
|
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
|
|
|
|
|
ContentProviderOperation op3 = ContentProviderOperation
|
|
|
|
|
.newUpdate(ContactsContract.Data.CONTENT_URI)
|
|
|
|
|
.withSelection(
|
|
|
|
|
ContactsContract.Data.RAW_CONTACT_ID + "=? and "
|
|
|
|
|
+ ContactsContract.Data.MIMETYPE + "=?",
|
|
|
|
|
new String[]{String.valueOf(rawContactId),
|
|
|
|
|
ContactsContract.CommonDataKinds.Photo.MIMETYPE})
|
|
|
|
|
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,// 对应data表中的data1字段
|
|
|
|
|
out.toByteArray()).build();
|
|
|
|
|
ops.add(op3);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
ContentProviderResult[] contentProviderResults = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
|
|
|
|
|
Log.e(TAG, "update: " + Arrays.toString(contentProviderResults));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
Log.e(TAG, "update: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void deleteContactPhone(Context context, Contact contact) {
|
|
|
|
|
Observable.create(new ObservableOnSubscribe<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void subscribe(@NonNull ObservableEmitter<Long> emitter) throws Throwable {
|
|
|
|
|
deleteRawContact(context, contact.getMobile());
|
|
|
|
|
emitter.onNext(0L);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.subscribeOn(Schedulers.io())
|
|
|
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
.subscribe(new Observer<Long>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onSubscribe(@NonNull Disposable d) {
|
|
|
|
|
Log.e("deleteContactPhone", "onSubscribe: ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNext(@NonNull Long aLong) {
|
|
|
|
|
Log.e("deleteContactPhone", "onNext: " + aLong);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onError(@NonNull Throwable e) {
|
|
|
|
|
Log.e("deleteContactPhone", "onError: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onComplete() {
|
|
|
|
|
Log.e("deleteContactPhone", "onComplete: ");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void deleteRawContact(Context context, String phoneNum) {
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
Cursor cursor = null;
|
|
|
|
|
try {
|
|
|
|
|
cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
|
|
|
|
|
new String[]{ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME},
|
|
|
|
|
ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum}, null);
|
|
|
|
|
if (cursor.moveToFirst()) {
|
|
|
|
|
long rawContactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.RAW_CONTACT_ID));
|
|
|
|
|
Log.e(TAG, "deleteRawContact: rawContactId = " + rawContactId);
|
|
|
|
|
// int idCode = resolver.delete(ContactsContract.Contacts.CONTENT_URI, ContactsContract.Contacts._ID + " =?", new String[]{String.valueOf(rawContactId)});
|
|
|
|
|
// Log.e(TAG, "deleteRawContact: idCode = " + idCode);
|
|
|
|
|
// int phoneCode = resolver.delete(ContactsContract.Data.CONTENT_URI, ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum});
|
|
|
|
|
// Log.e(TAG, "deleteRawContact: phoneCode = " + phoneCode);
|
|
|
|
|
// int contactIdCode = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts.CONTACT_ID + " =?", new String[]{String.valueOf(rawContactId)});
|
|
|
|
|
// Log.e(TAG, "deleteRawContact: contactIdCode = " + contactIdCode);
|
|
|
|
|
// String name
|
|
|
|
|
// int nameCode = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, "display_name=?", new String[]{name});
|
|
|
|
|
// Log.e(TAG, "deleteRawContact: nameCode = " + nameCode);
|
|
|
|
|
|
|
|
|
|
int result = resolver.delete(ContactsContract.RawContacts.CONTENT_URI,
|
|
|
|
|
ContactsContract.RawContacts._ID + "=?",
|
|
|
|
|
new String[]{String.valueOf(rawContactId)});
|
|
|
|
|
Log.e(TAG, "deleteRawContact: result = " + result);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
Log.e(TAG, "deleteRawContact: " + e.getMessage());
|
|
|
|
|
} finally {
|
|
|
|
|
if (cursor != null) {
|
|
|
|
|
cursor.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static long getRawContactId(Context context, String phoneNum) {
|
|
|
|
|
ContentResolver resolver = context.getContentResolver();
|
|
|
|
|
Cursor cursor = null;
|
|
|
|
|
try {
|
|
|
|
|
cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
|
|
|
|
|
new String[]{ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME},
|
|
|
|
|
ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum}, null);
|
|
|
|
|
if (cursor.moveToFirst()) {
|
|
|
|
|
long rawContactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.RAW_CONTACT_ID));
|
|
|
|
|
Log.e(TAG, "getRawContactId: rawContactId = " + rawContactId);
|
|
|
|
|
return rawContactId;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
Log.e(TAG, "deleteRawContact: " + e.getMessage());
|
|
|
|
|
} finally {
|
|
|
|
|
if (cursor != null) {
|
|
|
|
|
cursor.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加联系人信息
|
|
|
|
|
*/
|
|
|
|
|
@@ -156,7 +369,7 @@ public class ContactsUtils {
|
|
|
|
|
//插入data表
|
|
|
|
|
//add Name
|
|
|
|
|
nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
|
|
|
|
nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
|
|
|
|
|
nameValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
|
|
|
|
|
nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
|
|
|
|
|
resolver.insert(ContactsContract.Data.CONTENT_URI, nameValues);
|
|
|
|
|
|
|
|
|
|
|