android通讯录项目分析,Android 通讯录展示

获取系统通讯录,自定义通讯录展示:基于RecyclerView实现列表展示。

ca0e4523332a

image

技术:

RecyclerView、首字母排序(汉字转拼音)、侧边栏View实现、PopupWindow(气泡)。

1、创建通讯录实体类:

public class Contact implements Serializable {

private String letter; // 首字母

private String name; // 姓名

private String number; // 号码

...

}

这里继承了Serializable接口,方便Activity之间传递对象数据。

2、获取通讯录:

2.1:申请权限:

private void initData() {

if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)

!= PackageManager.PERMISSION_GRANTED){

String[] list = { Manifest.permission.READ_CONTACTS };

ActivityCompat.requestPermissions(this, list, 1);

}else {

readContacts();

}

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 1){

if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){

readContacts();

}

}

}

2.2 获取通讯录信息:

并将通讯录数据简单处理存入ArrayList中

2.2.1

获取通讯录数据

ContentResolver contentResolver = this.getContentResolver();

Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null, null, null, null);

cursor.getCount();

ArrayList data = new ArrayList<>();

while(cursor.moveToNext()) {

String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

Contact contact = new Contact();

contact.setName(name);

contact.setNumber(number);

data.add(contact);

}

cursor.close();

mContact = filledData(data);

Collections.sort(mContact, mComparator);

Collections.sort(mContact, mComparator);是用于对数据进行排序的。

mComparator是自定义的一个工具类。

2.2.2

对通讯录数据进行排序处理:

// 为list填充数据

private ArrayList filledData(ArrayList data){

ArrayList list = new ArrayList<>();

for (int i = data.size() - 1; i >= 0; i--) {

Contact sm = new Contact();

sm.setName(data.get(i).getName());

sm.setNumber(data.get(i).getNumber());

String pinyin = mParser.getSelling(data.get(i).getName());

String sortString = pinyin.substring(0, 1).toUpperCase();

if (sortString.matches("[A-Z]")) {

sm.setLetter(sortString);

} else {

sm.setLetter("#");

}

list.add(sm);

}

return list;

}

这里mParser用到了一个工具类:

private CharacterParser mParser = CharacterParser.getInstance();

用于将汉字转为拼音。

2.2.3 定义布局文件:

main_activity.xml,

view_contact.xml,

布局可根据自身需求定义。

2.2.4 实现Adapter:

常规RecycleView的Adapter定义࿰

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值