Files
XiaoxintongSystemOS/app/src/main/java/com/xxpatx/os/utils/ContactsUtils.java
tongtongstudio 398d353be9 version:1.4.8
fix:修复一键拨号
update:优化联系人闹钟
2025-02-10 17:05:54 +08:00

645 lines
32 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}