Android笔记: 获取手机联系人列表

简介: Android笔记: 获取手机联系人列表

image.png

下面直接贴代码

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;
        //联系人提供者的uri
        private 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"?>
    <LinearLayout
        xmlns: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">
        <ListView
            android: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;
        @Override
        protected 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();
            }
        }
        @Override
        public 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() {
                @Override
                public 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 {
            @Override
            public int getCount() {
                return phoneDtos.size();
            }
            @Override
            public Object getItem(int position) {
                return phoneDtos.get(position);
            }
            @Override
            public long getItemId(int position) {
                return position;
            }
            @SuppressLint("NewApi")
            @Override
            public 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.好了这样的话就已经完成了,大家有什么问题可以在下方留言。

目录
相关文章
|
1月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
410 2
|
1月前
|
存储 数据库 Android开发
安卓Jetpack Compose+Kotlin,支持从本地添加音频文件到播放列表,支持删除,使用ExoPlayer播放音乐
为了在UI界面添加用于添加和删除本地音乐文件的按钮,以及相关的播放功能,你需要实现以下几个步骤: 1. **集成用户选择本地音乐**:允许用户从设备中选择音乐文件。 2. **创建UI按钮**:在界面中创建添加和删除按钮。 3. **数据库功能**:使用Room数据库来存储音频文件信息。 4. **更新ViewModel**:处理添加、删除和播放音频文件的逻辑。 5. **UI实现**:在UI层支持添加、删除音乐以及播放功能。
102 1
|
16天前
|
Web App开发 移动开发 编解码
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
本文讨论了实时数据传输在互联网中的重要性,如即时通讯和在线直播。一对一通信通常使用WebRTC技术,但一对多直播需要流媒体服务器和特定协议,如RTSP、RTMP、SRT或RIST。RTMP由于其稳定性和早期普及,成为国内直播的主流。文章通过实例演示了如何使用OBS Studio和RTMP Streamer进行RTMP推流,并对比了不同流媒体传输协议的优缺点。推荐了两本关于FFmpeg和Android开发的书籍以供深入学习。
23 0
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
|
18天前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
21 0
|
1月前
|
存储 API Android开发
29. 【Android教程】折叠列表 ExpandableListView
29. 【Android教程】折叠列表 ExpandableListView
17 2
|
1月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
31 2
|
20天前
|
安全 Java API
Android获取Wi-Fi网络列表
【6月更文挑战第21天】
|
2月前
|
缓存 Android开发 开发者
安卓系统优化:提升手机性能的秘诀
【5月更文挑战第31天】本文将探讨如何通过一系列简单的步骤和技巧,对安卓系统进行优化,以提升手机的性能。我们将从清理无用文件、管理后台应用、调整系统设置等方面入手,帮助你的安卓设备运行更加流畅。
|
1月前
|
前端开发 JavaScript Android开发
手机APP开发|基于安卓APP实现掌上党支部——党员app
手机APP开发|基于安卓APP实现掌上党支部——党员app
|
Android开发
android联系人app<二>
首先接着上一篇,为什么谷歌设计联系人显示的时候姓名和电话不一起显示?    这里我们先到谷歌官方看联系人的介绍:      The Contacts Provider is an Android content provider component.
686 0