老规矩先上效果图:

在Android6.0以后我们需要手动去获取权限,我在程序里已经加入,其他权限可以参考Android 6.0权限管理以及动态申请,

友善提醒:不要用于非法用途哟

下面直接贴代码

1.先写一个实体类,来放名字和号码

public class PhoneDto {private String name;        //联系人姓名private String telPhone;    //电话号码public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTelPhone() {return telPhone;}public void setTelPhone(String telPhone) {this.telPhone = telPhone;}public PhoneDto() {}public PhoneDto(String name, String telPhone) {this.name = name;this.telPhone = telPhone;}
}

2.写我们获取联系人的工具类

public class PhoneUtil {// 号码public final static String NUM = ContactsContract.CommonDataKinds.Phone.NUMBER;// 联系人姓名public final static String NAME = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;//上下文对象private Context context;//联系人提供者的uriprivate Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;public PhoneUtil(Context context){this.context = context;}//获取所有联系人public List<PhoneDto> getPhone(){List<PhoneDto> phoneDtos = new ArrayList<>();ContentResolver cr = context.getContentResolver();Cursor cursor = cr.query(phoneUri,new String[]{NUM,NAME},null,null,null);while (cursor.moveToNext()){PhoneDto phoneDto = new PhoneDto(cursor.getString(cursor.getColumnIndex(NAME)),cursor.getString(cursor.getColumnIndex(NUM)));phoneDtos.add(phoneDto);}return phoneDtos;}
}

3.接下来贴主页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.test.content.MainActivity"><ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/lv_main_list"></ListView></LinearLayout>

4.该贴主Activity代码了

public class MainActivity extends AppCompatActivity {private List<PhoneDto> phoneDtos;private ListView lv_main_list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);check();}/*** 检查权限*/private void check() {//判断是否有权限if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},201);}else{initViews();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if(requestCode==201){initViews();}else{return;}}private void initViews() {PhoneUtil phoneUtil = new PhoneUtil(this);phoneDtos = phoneUtil.getPhone();lv_main_list = (ListView) findViewById(R.id.lv_main_list);MyAdapter myAdapter = new MyAdapter();lv_main_list.setAdapter(myAdapter);//给listview增加点击事件/*lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//拨打电话Intent intent = new Intent();intent.setAction("android.intent.action.CALL");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setData(Uri.parse("tel:"+phoneDtos.get(position).getTelPhone()));startActivity(intent);}});*/}//自定义适配器private class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return phoneDtos.size();}@Overridepublic Object getItem(int position) {return phoneDtos.get(position);}@Overridepublic long getItemId(int position) {return position;}@SuppressLint("NewApi")@Overridepublic View getView(int position, View convertView, ViewGroup parent) {PhoneDto phoneDto = phoneDtos.get(position);LinearLayout linearLayout = new LinearLayout(MainActivity.this);LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.WRAP_CONTENT);layoutParams.weight = 1;TextView tv_name = new TextView(MainActivity.this);tv_name.setId(View.generateViewId());tv_name.setLayoutParams(layoutParams);tv_name.setText(phoneDto.getName());TextView tv_num = new TextView(MainActivity.this);tv_num.setId(View.generateViewId());tv_num.setLayoutParams(layoutParams);tv_num.setText(phoneDto.getTelPhone());linearLayout.addView(tv_name);linearLayout.addView(tv_num);return linearLayout;}}
}

5.最后不要忘记添加权限, 在AndroidManifest.xml中加入,如果没有添加动态申请权限的话,可以去设置里面手动打开

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

6.好了这样的话就已经完成了

Android 获取手机通讯录联系人列表(仅供学习)相关推荐

  1. android 通过手机号码查询联系人,android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  2. android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  3. android sim卡联系人存储格式,Android获取手机通讯录、sim卡联系人及调用拨号界面方法...

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  4. android获取手机通讯录和sim卡通讯录

    获取手机通讯录 1 权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> 注意6. ...

  5. 爬取了京东商城上的部分手机评论数据,仅供学习使用

    京东的手机评论数据爬虫,仅供学习使用 说明 爬取了京东商城上的部分手机评论数据.由于项目的数据量要求不大,仅仅采用了比较简单的方式来进行数据的爬取,过程分为两个部分: 根据不同的手机品牌选择了第一页的 ...

  6. Android 获取手机通讯录信息 — 头像、姓名和A-Z的快速查询

    首先先看一下效果图再说吧: 具体实现过程如下: 先在AndroidManifest.xml文件中添加读取联系人的权限: 1 <uses-permission android:name=" ...

  7. Android 获取手机通讯录信息 — 头像、姓名和A-Z的快速查询

    具体实现过程如下: 先在AndroidManifest.xml文件中添加读取联系人的权限: 1 <uses-permission android:name="android.permi ...

  8. 获取手机通讯录联系人(包含模糊查询,dialog自定义,也有一个自定义通知栏)

    这里还有一个联系人类: package com.example.sendmsg;import android.graphics.Bitmap;public class ContactEntity {/ ...

  9. android 获取单个通讯录联系人信息(无权限跳转权限设置页面)

    首先说一下,在魅族手机上需要用户手动开启权限,不然获取到的cursor.moveToFirst()会返回false,反过来,如果cursor.moveToFirst()返回false,一般都是权限问题 ...

最新文章

  1. 华为工程师SRECon Asia见闻:聚焦可靠性、资源优化及性能提升
  2. 4月22日(牛马不对嘴)
  3. iphone xh5打开ppt预览_教你如何用iPhone拍全景照片
  4. Python format 函数- Python零基础入门教程
  5. Qt工作笔记-QList (链表) QVector (数组)【转载】
  6. sae中使用django migrate导致13013的问题
  7. 软件测试—软件测试基础知识—测试用例设计的方法判定表和因果图
  8. golang (3) 编译不同的平台文件
  9. 无线通信中多径传播包络服从瑞利衰落衰落MATLAB仿真
  10. web端常用手机号,邮箱,税号,组织机构代码,银行卡号等JS正则校验表达式总结
  11. UE4材质(四):自发光颜色Emissive——灯
  12. 以“掌上东航”为例,论混合开发在企业级项目中的实践
  13. 如何设置阿里云安全组?开放和关闭端口很简单
  14. 最让男人受不了的40种极品女人!
  15. 评价类模型---TOPSIS法
  16. Deeplearning for NLP (简介)
  17. 浏览器的收藏夹的导入导出
  18. vue中clearInterval()清除定时器报timeout.close is not a function错误?
  19. 玩转Kaggle:Classify Leaves(叶子分类)——模型设计与训练
  20. 手机升级8.0后,黑域启用失败

热门文章

  1. docker 安装jaeger
  2. outlook express 邮件附件都带有att000xxx.htm 附件?
  3. 小黄豆CRM v1.17版本发布
  4. 被讨厌的勇气读书笔记
  5. [Swift]LeetCode1135. 最低成本联通所有城市 | Connecting Cities With Minimum Cost
  6. 一款非常好用的图片无损放大工具:Topaz Gigapixel AI
  7. www.a-d-w-a-r-e.com病毒清除方法
  8. 读取文件路径中的图片
  9. TOJ4309 表达式求值 stack
  10. 中铁员工入职培训心得体会