645 lines
32 KiB
Java
645 lines
32 KiB
Java
package com.xxpatx.os.utils;
|
||
|
||
import android.content.ContentProviderOperation;
|
||
import android.content.ContentProviderResult;
|
||
import android.content.ContentResolver;
|
||
import android.content.ContentUris;
|
||
import android.content.ContentValues;
|
||
import android.content.Context;
|
||
import android.database.Cursor;
|
||
import android.graphics.Bitmap;
|
||
import android.graphics.BitmapFactory;
|
||
import android.net.Uri;
|
||
import android.provider.ContactsContract;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
|
||
import com.bumptech.glide.Glide;
|
||
import com.xxpatx.os.R;
|
||
import com.xxpatx.os.bean.Contact;
|
||
import com.xxpatx.os.bean.ContactId;
|
||
|
||
import java.io.ByteArrayOutputStream;
|
||
import java.io.IOException;
|
||
import java.util.ArrayList;
|
||
import java.util.Arrays;
|
||
import java.util.List;
|
||
import java.util.function.Predicate;
|
||
import java.util.stream.Collectors;
|
||
|
||
import io.reactivex.rxjava3.annotations.NonNull;
|
||
import io.reactivex.rxjava3.core.Observable;
|
||
import io.reactivex.rxjava3.core.ObservableEmitter;
|
||
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
|
||
import io.reactivex.rxjava3.core.Observer;
|
||
import io.reactivex.rxjava3.disposables.Disposable;
|
||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||
|
||
public class ContactsUtils {
|
||
private static final String TAG = "ContactsUtils";
|
||
|
||
public static void saveContactPhone(Context context, Contact contact) {
|
||
Observable.create(new ObservableOnSubscribe<Long>() {
|
||
@Override
|
||
public void subscribe(@NonNull ObservableEmitter<Long> emitter) throws Throwable {
|
||
long time = System.currentTimeMillis();
|
||
Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
|
||
if (TextUtils.isEmpty(contact.getAvatar())) {
|
||
Bitmap bitmap = Glide.with(context).asBitmap().load(R.drawable.default_avatar).override(200, 200).submit().get();
|
||
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
||
updateContactPhone(context, contact, bitmap);
|
||
} else {
|
||
insertContactPhone(context, contact, bitmap);
|
||
}
|
||
} else {
|
||
Bitmap bitmap = Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).error(R.drawable.default_avatar).submit().get();
|
||
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
||
updateContactPhone(context, contact, bitmap);
|
||
} else {
|
||
insertContactPhone(context, contact, bitmap);
|
||
}
|
||
}
|
||
emitter.onNext(System.currentTimeMillis() - time);
|
||
}
|
||
}).subscribeOn(Schedulers.io())
|
||
.observeOn(Schedulers.newThread())
|
||
.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 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 {
|
||
long time = System.currentTimeMillis();
|
||
for (Contact contact : contactList) {
|
||
if (TextUtils.isEmpty(contact.getMobile())) {
|
||
continue;
|
||
}
|
||
Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
|
||
if (TextUtils.isEmpty(contact.getAvatar())) {
|
||
Bitmap bitmap = Glide.with(context).asBitmap().load(R.drawable.default_avatar).override(200, 200).submit().get();
|
||
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
||
updateContactPhone(context, contact, bitmap);
|
||
} else {
|
||
insertContactPhone(context, contact, bitmap);
|
||
}
|
||
} else {
|
||
Bitmap bitmap = Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).error(R.drawable.default_avatar).submit().get();
|
||
if (ContactsUtils.isExist(context, contact.getMobile())) {
|
||
updateContactPhone(context, contact, bitmap);
|
||
} else {
|
||
insertContactPhone(context, contact, bitmap);
|
||
}
|
||
}
|
||
|
||
}
|
||
emitter.onNext(System.currentTimeMillis() - time);
|
||
}
|
||
}).subscribeOn(Schedulers.io())
|
||
.observeOn(Schedulers.newThread())
|
||
.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 insertContactPhone(Context context, Contact contact) {
|
||
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);
|
||
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 updateContactPhone(Context context, Contact contact) {
|
||
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);
|
||
}
|
||
|
||
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(Schedulers.newThread())
|
||
.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;
|
||
}
|
||
|
||
/**
|
||
* 添加联系人信息
|
||
*/
|
||
public static void insertConstacts(Context context, String name, String phone, List<String> list) {
|
||
long contactId = getContactId(context, name);
|
||
if (contactId == -1) {
|
||
ContentResolver resolver = context.getContentResolver();
|
||
|
||
//插入raw_contacts表,并获取_id属性
|
||
ContentValues nameValues = new ContentValues();
|
||
long rawContactId = ContentUris.parseId(resolver.insert(ContactsContract.RawContacts.CONTENT_URI, nameValues));
|
||
|
||
//插入data表
|
||
//add Name
|
||
nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
||
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);
|
||
|
||
|
||
try {
|
||
//写入头像
|
||
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.default_avatar);
|
||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
|
||
ContentValues photoValues = new ContentValues();
|
||
photoValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
|
||
photoValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
|
||
photoValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
|
||
context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, photoValues);
|
||
out.flush();
|
||
out.close();
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
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, phone);
|
||
phoneValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
||
//插入data表
|
||
context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, phoneValues);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 判断某个手机号是否存在
|
||
*/
|
||
public static boolean isThePhoneExist(Context context, String phoneNum) {
|
||
//uri= content://com.android.contacts/data/phones/filter/#
|
||
Cursor cursor = null;
|
||
try {
|
||
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNum);
|
||
ContentResolver resolver = context.getContentResolver();
|
||
cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME},
|
||
null, null, null); //从raw_contact表中返回display_name
|
||
for (String columnName : cursor.getColumnNames()) {
|
||
Log.e("isThePhoneExist: ", columnName);
|
||
}
|
||
while (cursor.moveToNext()) {
|
||
for (String columnName : cursor.getColumnNames()) {
|
||
Log.e("isThePhoneExist: ", columnName);
|
||
Log.e("isThePhoneExist: ", cursor.getColumnIndex(columnName) + "");
|
||
if (cursor.getColumnIndex(columnName) != -1) {
|
||
Log.e("isThePhoneExist: getString = ", " - " + cursor.getString(cursor.getColumnIndex(columnName)));
|
||
}
|
||
}
|
||
}
|
||
if (cursor.moveToFirst()) {
|
||
//Log.i(TAG, "name=" + cursor.getString(0) + " , phoneNum = " + phoneNum);
|
||
cursor.close();
|
||
return true;
|
||
}
|
||
} catch (Exception e) {
|
||
//Log.i(TAG, "163 e =" + e.getMessage());
|
||
e.printStackTrace();
|
||
} finally {
|
||
if (cursor != null) {
|
||
cursor.close();
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* 获取所有联系人信息
|
||
*/
|
||
// public static List<SysContactsListBean> getAllSysContacts(Context context) {
|
||
// List<SysContactsListBean> list = new ArrayList<>();
|
||
// try {
|
||
// ContentResolver resolver = context.getContentResolver();
|
||
// SysContactsListBean sysContactsListBean;
|
||
// Uri uri = Uri.parse("content://com.android.contacts/data/phones");
|
||
//
|
||
// Cursor cursor1 = resolver.query(uri,
|
||
// new String[]{ContactsContract.Data.RAW_CONTACT_ID,
|
||
// ContactsContract.Data.DISPLAY_NAME,
|
||
// ContactsContract.CommonDataKinds.Phone.NUMBER},
|
||
// null, null, null);
|
||
//
|
||
// while (cursor1.moveToNext()) {
|
||
// sysContactsListBean = new SysContactsListBean();
|
||
// sysContactsListBean.setCustomerId(cursor1.getLong(0));
|
||
// sysContactsListBean.setCustomerName(cursor1.getString(1));
|
||
// sysContactsListBean.setPhoneNumber(cursor1.getString(2));
|
||
// list.add(sysContactsListBean);
|
||
// }
|
||
// } catch (Exception e) {
|
||
// e.printStackTrace();
|
||
// }
|
||
//
|
||
// if (!CollectorUtils.isEmpty(list)) {
|
||
// Collections.sort(list, new Comparator<SysContactsListBean>() {
|
||
// @Override
|
||
// public int compare(SysContactsListBean o1, SysContactsListBean o2) {
|
||
// return o2.getCustomerName().compareTo(o1.getCustomerName());
|
||
// }
|
||
// });
|
||
// }
|
||
// return list;
|
||
// }
|
||
public static void getContacts(Context context) {
|
||
//https://blog.csdn.net/luofeixiongsix/article/details/48849511
|
||
//查询raw_contacts表获得联系人
|
||
ContentResolver resolver = context.getContentResolver();
|
||
// Uri uri = ContactsContract.Data.CONTENT_URI;//content://com.android.contacts/data 有电话+86
|
||
// Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//content://com.android.contacts/data/phones 有电话+86
|
||
// Uri uri = ContactsContract.RawContacts.CONTENT_URI;//content://com.android.contacts/raw_contacts 无电话
|
||
Uri uri = ContactsContract.Contacts.CONTENT_URI;//content://com.android.contacts/contacts 无电话
|
||
|
||
Log.e(TAG, "getContacts: " + uri.toString());
|
||
//查询联系人
|
||
Cursor cursor1 = resolver.query(ContactsContract.Data.CONTENT_URI, null, null, null, null);
|
||
Log.e("getContacts: cursor1 = ", Arrays.toString(cursor1.getColumnNames()));
|
||
Cursor cursor2 = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
|
||
Log.e("getContacts: cursor2 = ", Arrays.toString(cursor1.getColumnNames()));
|
||
Cursor cursor3 = resolver.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);
|
||
Log.e("getContacts: cursor3 = ", Arrays.toString(cursor1.getColumnNames()));
|
||
Cursor cursor4 = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
|
||
Log.e("getContacts: cursor4 = ", Arrays.toString(cursor1.getColumnNames()));
|
||
|
||
// while (cursor.moveToNext()) {
|
||
// String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
|
||
// String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
|
||
// Log.e(TAG, "getContacts: 联系人:" + name);
|
||
// Log.e(TAG, "getContacts: 电话:" + number);
|
||
// }
|
||
// for (String columnName : cursor.getColumnNames()) {
|
||
// Log.e("getContacts: ", columnName);
|
||
// }
|
||
// while (cursor.moveToNext()) {
|
||
// for (String columnName : cursor.getColumnNames()) {
|
||
// Log.e("getContacts: ", cursor.getColumnIndex(columnName) + "\t" + columnName);
|
||
// if (cursor.getColumnIndex(columnName) != -1) {
|
||
// Log.e("getContacts: getString =", " " + cursor.getString(cursor.getColumnIndex(columnName)));
|
||
// }
|
||
// }
|
||
// }
|
||
// cursor.close();
|
||
}
|
||
|
||
@Deprecated
|
||
public static List<ContactId> getLocalContacts(Context context) {
|
||
ContentResolver resolver = context.getContentResolver();
|
||
Uri uri = ContactsContract.Contacts.CONTENT_URI;
|
||
Cursor cursor = resolver.query(uri, null, null, null, null);
|
||
List<ContactId> contactIds = new ArrayList<>();
|
||
while (cursor.moveToNext()) {
|
||
long id = cursor.getLong(cursor.getColumnIndexOrThrow("name_raw_contact_id"));
|
||
int in_phone = cursor.getInt(cursor.getColumnIndexOrThrow("indicate_phone_or_sim_contact"));
|
||
String display_name = cursor.getString(cursor.getColumnIndexOrThrow("display_name"));
|
||
String photo_uri = cursor.getString(cursor.getColumnIndexOrThrow("photo_uri"));
|
||
|
||
ContactId contactId = new ContactId(id, in_phone, display_name, photo_uri);
|
||
contactIds.add(contactId);
|
||
}
|
||
cursor.close();
|
||
List<ContactId> filter = contactIds.stream().filter(new Predicate<ContactId>() {
|
||
@Override
|
||
public boolean test(ContactId contactId) {
|
||
return contactId.getInPhone() == -1;
|
||
}
|
||
}).collect(Collectors.toList());
|
||
Log.e(TAG, "getLocalContacts: " + filter);
|
||
return filter;
|
||
}
|
||
|
||
|
||
/**
|
||
* 判断某个手机号是否存在
|
||
*/
|
||
public static boolean isExist(Context context, String phoneNum) {
|
||
//uri= content://com.android.contacts/data/phones/filter/#
|
||
Cursor cursor = null;
|
||
try {
|
||
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNum);
|
||
ContentResolver resolver = context.getContentResolver();
|
||
cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME},
|
||
null, null, null); //从raw_contact表中返回display_name
|
||
if (cursor.moveToFirst()) {
|
||
cursor.close();
|
||
return true;
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
} finally {
|
||
if (cursor != null) {
|
||
cursor.close();
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* @param context
|
||
* @param phoneNum
|
||
* @return 获取联系人id
|
||
*/
|
||
public static long getContactId(Context context, String phoneNum) {
|
||
Cursor cursor = null;
|
||
try {
|
||
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNum);
|
||
ContentResolver resolver = context.getContentResolver();
|
||
cursor = resolver.query(uri, null, null, null, null); //从raw_contact表中返回display_name
|
||
if (cursor.moveToFirst()) {
|
||
for (String columnName : cursor.getColumnNames()) {
|
||
Log.e("getContactId: ", cursor.getColumnIndex(columnName) + "\t" + columnName);
|
||
if (cursor.getColumnIndex(columnName) != -1) {
|
||
Log.e("getContactId: getString =", " " + cursor.getString(cursor.getColumnIndex(columnName)));
|
||
}
|
||
}
|
||
return cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.CONTACT_ID));
|
||
}
|
||
cursor.close();
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
} finally {
|
||
if (cursor != null) {
|
||
cursor.close();
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
|
||
}
|