Android常用代码-读取联系人

  1. 1. AndroidManifest.xml添加权限
  2. 2. 申请动态权限,并读取数据

AndroidManifest.xml添加权限

1
<uses-permission android:name="android.permission.READ_CONTACTS"/>

申请动态权限,并读取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
private void loadAddressBook() {
AndPermission.with(this)
.runtime()
.permission(Permission.READ_CONTACTS)
.rationale((context, data, executor) -> showConfirmDialog(getString(R.string.get_contacts), getString(R.string.contact_rationale), null, null, false, new TwoBtnTextDialog.OnTwoBtnTextClick() {
@Override
public void onLeftClick(TextView v) {
executor.cancel();
}

@Override
public void onRightClick(TextView v) {
executor.execute();
}
}))
.onDenied(data -> {
if (AndPermission.hasAlwaysDeniedPermission(AddressBookActivity.this, data)) {
// 这里使用一个Dialog展示没有这些权限应用程序无法继续运行,询问用户是否去设置中授权。
final Setting setting = AndPermission.with(AddressBookActivity.this).runtime().setting();
setting.onComeback(() -> {
if (AndPermission.hasPermissions(AddressBookActivity.this, Permission.READ_CONTACTS)) {
readContacts();
}
});

showConfirmDialog(getString(R.string.permission_set),
getString(R.string.set_read_phone_permission),
null, null, false,
new TwoBtnTextDialog.OnTwoBtnTextClick() {
@Override
public void onLeftClick(TextView v) {
}

@Override
public void onRightClick(TextView v) {
setting.start();
}
});
}
})
.onGranted(data -> readContacts())
.start();
}
/**
* 读取联系人
*/
private void readContacts() {
mBooks = new ArrayList<>();
Cursor cursor = null;
try {
//cursor指针 query询问 contract协议 kinds种类
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (number != null) {
number = number.replace(" ", "");
}
mBooks.add(new AddressBookEntity(displayName, number));
}
Log.e("TTT", "books="+ mBooks.toString());
//notify公布
mAdapter.setData(mBooks);
mSidebar.setShowString(CollectionUtil.listToString(mAdapter.getLetters()));
mSidebar.setTextSize(ScreenAdapterUtil.getInstance().getScaledValue(36));
mLlNoData.setVisibility(CollectionUtil.isEmpty(mBooks) ? View.VISIBLE : View.GONE);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}