package com.application.zhangshi_app_android.ui.function;
|
|
import android.Manifest;
|
import android.content.ContentResolver;
|
import android.content.ContentUris;
|
import android.database.Cursor;
|
import android.net.Uri;
|
import android.provider.ContactsContract;
|
import android.view.View;
|
|
import com.android.app_base.base.dialog.BaseDialog;
|
import com.android.app_base.base.dialog.TipsDialog;
|
import com.android.app_base.base.dialog.UIDialog;
|
import com.android.app_base.base.dialog.WaitDialog;
|
import com.android.app_base.base.view.BaseActivity;
|
import com.android.app_base.manager.UserManager;
|
import com.android.app_base.utils.ToastUtils;
|
import com.android.app_base.utils.rxbus.MessageEvent;
|
import com.android.app_base.utils.rxbus.RxBus;
|
import com.android.app_base.widget.LinearItemDecoration;
|
import com.application.zhangshi_app_android.BR;
|
import com.application.zhangshi_app_android.R;
|
import com.application.zhangshi_app_android.adapter.ContactsRvAdapter;
|
import com.application.zhangshi_app_android.bean.ContactsBean;
|
import com.application.zhangshi_app_android.bean.ContactsDetailBean;
|
import com.application.zhangshi_app_android.databinding.ActivityContactsImportBinding;
|
import com.blankj.utilcode.util.PermissionUtils;
|
import com.hjq.bar.TitleBar;
|
|
import java.io.ByteArrayOutputStream;
|
import java.io.File;
|
import java.io.FileNotFoundException;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.URI;
|
import java.net.URISyntaxException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* @author Ljj
|
* @date 2023.08.01. 13:44
|
* @desc 通讯录导入 Activity
|
*/
|
public class ContactsImportActivity extends BaseActivity<ActivityContactsImportBinding,ContactsImportActivityViewModel> {
|
private ContactsRvAdapter adapter;
|
private BaseDialog mWaitDialog;
|
@Override
|
public int getLayoutId() {
|
return R.layout.activity_contacts_import;
|
}
|
|
@Override
|
public int getVariableId() {
|
return BR.viewModel;
|
}
|
|
@Override
|
public void initParam() {
|
|
}
|
|
@Override
|
public void initView() {
|
//下拉刷新布局
|
binding.refreshLayout.setEnableRefresh(false);
|
binding.refreshLayout.setEnableLoadMore(false);
|
binding.refreshLayout.setEnableOverScrollDrag(true);
|
binding.refreshLayout.setOnLoadMoreListener(refreshLayout -> {
|
});
|
//recyclerView适配器
|
adapter = new ContactsRvAdapter(this);
|
LinearItemDecoration itemDecoration = new LinearItemDecoration();
|
itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12));
|
itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20));
|
itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20));
|
binding.recyclerView.addItemDecoration(itemDecoration);
|
binding.recyclerView.setAdapter(adapter);
|
|
binding.ivOperate.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
List<ContactsBean> list = adapter.getData();
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
UIDialog.Builder builder = new UIDialog.Builder(ContactsImportActivity.this);
|
builder.setTitle("提示");
|
builder.setContent("是否导入所有通讯录数据?");
|
builder.setCancel("取消");
|
builder.setConfirm("导入");
|
builder.setListener(new UIDialog.OnListener() {
|
@Override
|
public void onConfirm(BaseDialog dialog) {
|
viewModel.addContacts(list.get(0).getContactsDetailBeans());
|
}
|
});
|
builder.show();
|
}
|
});
|
}
|
|
@Override
|
public void initData() {
|
UserManager.getInstance().getPermissions(new PermissionUtils.SimpleCallback() {
|
@Override
|
public void onGranted() {
|
List<ContactsDetailBean> list = new ArrayList<>();
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
dataLoading();
|
}
|
});
|
// 获取ContentResolver对象
|
ContentResolver contentResolver = getContentResolver();
|
// 查询联系人数据,返回一个Cursor对象
|
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
|
|
if (cursor == null || cursor.getCount() == 0) {
|
return;
|
}
|
// 遍历Cursor对象,获取联系人信息
|
while (cursor.moveToNext()) {
|
ContactsDetailBean contactsDetailBean = new ContactsDetailBean();
|
contactsDetailBean.setMyName(UserManager.getInstance().getUserName());
|
// 获取联系人ID
|
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
|
|
// 获取联系人姓名
|
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
|
contactsDetailBean.setName(name);
|
|
// 查询昵称信息
|
Cursor nicknameCursor = contentResolver.query(
|
ContactsContract.Data.CONTENT_URI,
|
null,
|
ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",
|
new String[]{id, ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE},
|
null
|
);
|
if (nicknameCursor != null && nicknameCursor.moveToNext()) {
|
String nickname = nicknameCursor.getString(nicknameCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Nickname.NAME));
|
contactsDetailBean.setNickName(nickname);
|
nicknameCursor.close();
|
}
|
|
// 查询工作单位
|
Cursor organizationCursor = contentResolver.query(
|
ContactsContract.Data.CONTENT_URI,
|
null,
|
ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",
|
new String[]{id, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE},
|
null
|
);
|
String company = null;
|
if (organizationCursor != null && organizationCursor.moveToNext()) {
|
company = organizationCursor.getString(organizationCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Organization.COMPANY));
|
contactsDetailBean.setWork(company);
|
organizationCursor.close();
|
}
|
|
// 获取联系人电话号码
|
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
|
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null);
|
while (phoneCursor.moveToNext()) {
|
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
|
contactsDetailBean.setPhone(phoneNumber);
|
}
|
phoneCursor.close();
|
|
// 查询联系人的IM(即时通讯)账号信息
|
Cursor imCursor = contentResolver.query(
|
ContactsContract.Data.CONTENT_URI,
|
null,
|
ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",
|
new String[]{id, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE},
|
null
|
);
|
if (imCursor != null && imCursor.getCount() > 0) {
|
while (imCursor.moveToNext()) {
|
String imAccount = imCursor.getString(imCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Im.DATA));
|
int imProtocol = imCursor.getInt(imCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Im.PROTOCOL));
|
// 获取IM账号类型标签
|
String imLabel = imCursor.getString(imCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Im.LABEL));
|
if (imProtocol == ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ) {
|
contactsDetailBean.setQq(imAccount);
|
}
|
if (imLabel != null) {
|
if (imLabel.contains("QQ") || imLabel.contains("qq")){
|
contactsDetailBean.setQq(imAccount);
|
}else if (imLabel.contains("微信") || imLabel.contains("wechat") || imLabel.contains("WeChat") || imLabel.contains("wx")){
|
contactsDetailBean.setWx(imAccount);
|
}else if (imLabel.contains("推特") || imLabel.contains("Twitter") || imLabel.contains("twitter")){
|
contactsDetailBean.setTwitter(imAccount);
|
}
|
}
|
|
}
|
imCursor.close();
|
}
|
|
// 查询联系人的备注信息
|
Cursor noteCursor = getContentResolver().query(
|
ContactsContract.Data.CONTENT_URI,
|
null,
|
ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",
|
new String[]{id, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE},
|
null
|
);
|
if (noteCursor != null && noteCursor.moveToFirst()) {
|
String note = noteCursor.getString(noteCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Note.NOTE));
|
contactsDetailBean.setRemark(note);
|
noteCursor.close();
|
}
|
|
// 获取联系人头像
|
String photoId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.PHOTO_ID));
|
if (photoId != null) {
|
Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, Long.parseLong(photoId));
|
String mimeType = getContentResolver().getType(photoUri);
|
contactsDetailBean.setUrl(photoUri.toString());
|
// 获取联系人头像 的字节数据,用于将图片上传服务器
|
// 打开头像 Uri,获取输入流
|
InputStream inputStream = null;
|
try {
|
inputStream = contentResolver.openInputStream(photoUri);
|
// 将输入流转换成字节数组
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
byte[] buffer = new byte[1024];
|
int bytesRead;
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
byteArrayOutputStream.write(buffer, 0, bytesRead);
|
}
|
byte[] photoData = byteArrayOutputStream.toByteArray();
|
contactsDetailBean.setPhotoData(photoData);
|
// 关闭输入流和字节数组输出流
|
inputStream.close();
|
byteArrayOutputStream.close();
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
// 获取联系人邮箱
|
Cursor emailCursor = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
|
null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + id, null, null);
|
while (emailCursor.moveToNext()) {
|
String email = emailCursor.getString(emailCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Email.DATA));
|
}
|
emailCursor.close();
|
list.add(contactsDetailBean);
|
}
|
cursor.close();
|
|
runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
if (list.size() > 0){
|
dataFinish();
|
ContactsBean contactsBean = new ContactsBean();
|
contactsBean.setContactsDetailBeans(list);
|
contactsBean.setMyName("手机本地");
|
adapter.addItem(contactsBean);
|
}else{
|
dataNull();
|
}
|
}
|
});
|
|
}
|
|
}).start();
|
}
|
|
@Override
|
public void onDenied() {
|
ToastUtils.showShort("请开启获取通讯录权限");
|
}
|
}, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS);
|
|
}
|
|
@Override
|
public void initLiveDataObserve() {
|
|
}
|
|
@Override
|
protected void dataNull() {
|
super.dataNull();
|
binding.layoutDataNull.setVisibility(View.VISIBLE);
|
binding.refreshLayout.setVisibility(View.GONE);
|
}
|
|
@Override
|
protected void dataError() {
|
super.dataError();
|
binding.layoutDataNull.setVisibility(View.VISIBLE);
|
binding.tvDataNull.setText("没有权限,请开启获取通讯录权限");
|
binding.refreshLayout.setVisibility(View.GONE);
|
}
|
|
@Override
|
protected void dataLoading() {
|
if (mWaitDialog == null) {
|
mWaitDialog = new WaitDialog.Builder(this)
|
// 消息文本可以不用填写
|
.setMessage("加载数据中...")
|
.create();
|
}
|
if (!mWaitDialog.isShowing()) {
|
mWaitDialog.show();
|
}
|
}
|
|
@Override
|
protected void dataFinish() {
|
if (mWaitDialog != null && mWaitDialog.isShowing()) {
|
mWaitDialog.dismiss();
|
mWaitDialog = null;
|
}
|
binding.ivOperate.setVisibility(View.VISIBLE);
|
}
|
|
@Override
|
protected void dialogLoading() {
|
if (mWaitDialog == null) {
|
mWaitDialog = new WaitDialog.Builder(this)
|
// 消息文本可以不用填写
|
.setMessage("导入中...")
|
.create();
|
}
|
if (!mWaitDialog.isShowing()) {
|
mWaitDialog.show();
|
}
|
}
|
|
@Override
|
protected void dialogDismiss() {
|
if (mWaitDialog != null && mWaitDialog.isShowing()) {
|
mWaitDialog.dismiss();
|
mWaitDialog = null;
|
}
|
}
|
|
@Override
|
public void onLeftClick(TitleBar titleBar) {
|
finish();
|
}
|
}
|