1、读取联系人需要获取动态授权
androidManifest中添加
<uses-permission android:name="android.permission.READ_CONTACTS" />
2、动态进行申请
private static final int REQUEST_CODE = 1;
case R.id.iv_linkman: //这个是点击事件
//检测程序是否开启权限
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CONTACTS) !=
PackageManager.PERMISSION_GRANTED) {//没有权限需要动态获取
//动态请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CODE);
} else {
getLinkMan();
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 0);
}
break;
3、
/**
* 读取联系人方法
*/
private void getLinkMan() {
Cursor cursor = null;
try {
//查询联系人数据
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
null, null, null);
if (cursor != null) {
// Log.e("tag","*****************************");
while (cursor.moveToNext()) {
//获取联系人姓名
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds
.Phone.DISPLAY_NAME));
//获取联系人号码
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds
.Phone.NUMBER));
contactsList.add(displayName + "-" + number);
}
// adapter.notifyDataSetChanged();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (data == null) {
return;
}
//处理返回的data,获取选择的联系人信息**
Uri uri = data.getData();
String[] contacts = getPhoneContacts(uri);
if (contacts != null) {
// name1.setText(contacts[0]);
//et_phone是Editext的id
et_phone.setText(contacts[1]);
//s1 = phone1.getText().toString().replaceAll(" ", "");
}
break;
}
}
//读取联系人并申请权限
private String[] getPhoneContacts(Uri uri) {
String[] contact = new String[2];
//**//得到ContentResolver对象**
ContentResolver cr = getContentResolver();
//**//取得电话本中开始一项的光标**
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
// **//取得联系人姓名**
int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
contact[0] = cursor.getString(nameFieldColumnIndex);
//**//取得电话号码**
//**版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取**
//检查是否有读取联系人权限
String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
if (phone != null) {
phone.moveToFirst();
contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phone.close();
cursor.close();
} else {
return null;
}
return contact;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//判断是否给于权限
//这里是为了授权成功直接走联系人,不然的话,你同意授权之后还需再次点击
getLinkMan();
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 0);
//申请读取联系人权限成功
} else {
ToastUtils.show("取消授权");
}
}
}
最后再加一个 edittext输入手机号自动加空格
布局
<EditText
android:id="@+id/et_phone"
android:layout_width="@dimen/dp_126"
android:layout_height="@dimen/dp_34"
android:layout_centerVertical="true"
android:maxLength="13"
android:numeric="integer"
android:layout_toLeftOf="@+id/iv_linkman"
android:gravity="center_vertical|center"
android:layout_marginRight="@dimen/dp_8"
android:background="@drawable/order_time_not_background"
android:hint="用于接收手机短信"
android:textSize="@dimen/sp_14" />
private void initEditData() {
et_phone.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
if (charSequence == null || charSequence.length() == 0) {
return;
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < charSequence.length(); i++) {
if (i != 3 && i != 8 && charSequence.charAt(i) == ' ') {
continue;
} else {
stringBuilder.append(charSequence.charAt(i));
if ((stringBuilder.length() == 4 || stringBuilder.length() == 9)
&& stringBuilder.charAt(stringBuilder.length() - 1) != ' ') {
stringBuilder.insert(stringBuilder.length() - 1, ' ');
}
}
}
if (!stringBuilder.toString().equals(charSequence.toString())) {
int index = start + 1;
if (stringBuilder.charAt(start) == ' ') {
if (before == 0) {
index++;
} else {
index--;
}
} else {
if (before == 1) {
index--;
}
}
et_phone.setText(stringBuilder.toString());
et_phone.setSelection(index);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
亲测可实现功能