最近做一个联系人方面的项目,包括通讯录在这记录一下,希望可以帮到有用的朋友
1.查询手机所有联系人
public void queryContactPhoneNumber() {
Observable.create(new ObservableOnSubscribe<Numberbean>() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void subscribe(ObservableEmitter<Numberbean> emitter) throws Exception {
String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.Data.CONTACT_ID
};
Cursor cursor = mApplication.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
// 取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
int numberFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int contactIdIndex = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
String name = cursor.getString(nameFieldColumnIndex);
String number = cursor.getString(numberFieldColumnIndex);
long contactId = cursor.getLong(contactIdIndex);//通过id查找头像
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
contactId);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(mApplication.getContentResolver(), uri);
Bitmap photo = BitmapFactory.decodeStream(input);
Numberbean numberbean = new Numberbean(name, number, 0);
if (photo != null) {
BitmapDrawable bitmapDrawable = new BitmapDrawable(photo);
numberbean.setImgHead(bitmapDrawable);
}
emitter.onNext(numberbean);
}
cursor.close();//关闭游标
emitter.onComplete();
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Numberbean>() {
@Override
public void onSubscribe(Disposable d) {
data.clear();
}
@Override
public void onNext(Numberbean numberbean) {
data.add(numberbean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onCo