Android 读取联系人

决赛世界杯直播

1、读取联系人需要获取动态授权

androidManifest中添加

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输入手机号自动加空格

布局

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) {

}

});

}

亲测可实现功能

Copyright © 2088 世界杯女足_足球歌曲世界杯主题曲 - luxiuying.com All Rights Reserved.
友情链接