一、结构搭建

二、代码实现

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.suke.getnameandphone"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.GetNameAndPhone"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-permission android:name="android.permission.WRITE_CONTACTS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.GET_ACCOUNTS" /><uses-permission android:name="android.permission.CALL_PHONE" />
</manifest>

activity_main.xml

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

MainActivity

package com.suke.getnameandphone;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.content.ContentUris;
import android.content.ContentValues;
import android.widget.TextView;import java.util.List;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_id = new TextView(MainActivity.this);tv_id.setId(View.generateViewId());tv_id.setLayoutParams(layoutParams);tv_id.setText(phoneDto.getId());//姓名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_id);linearLayout.addView(tv_name);linearLayout.addView(tv_num);return linearLayout;}}
}

PhoneDto

package com.suke.getnameandphone;public class PhoneDto {private String id;          //序号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 String getId() {return id;}public void setId(String id) {this.id = id;}public PhoneDto() {}public PhoneDto(String id, String name, String telPhone) {this.id = id;this.name = name;this.telPhone = telPhone;}
}

PhoneUtil

package com.suke.getnameandphone;import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;import java.util.ArrayList;
import java.util.List;public class PhoneUtil {//序号public final static String ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;// 号码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[]{ID, NUM, NAME}, null, null, null);while (cursor.moveToNext()) {@SuppressLint("Range") PhoneDto phoneDto = new PhoneDto(cursor.getString(cursor.getColumnIndex(ID)), cursor.getString(cursor.getColumnIndex(NAME)), cursor.getString(cursor.getColumnIndex(NUM)));phoneDtos.add(phoneDto);}return phoneDtos;}
}

三、执行效果

 

Android studio基础练习07【获取手机通讯录】相关推荐

  1. Android Studio 基础 之 简单获取手机端所有图片

    Android Studio 基础 之 简单获取手机端所有图片 目录 Android Studio 基础 之 简单获取手机端所有图片 一.简单介绍 二.实现原理 三.注意实现 四.预览效果 五.实现步 ...

  2. Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理

    Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 目录 Android Studi ...

  3. 日历 android 周历,Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理...

    Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android Studio 基础 之 获取系统Calendar ...

  4. Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理

    Android Studio 基础 之 获取系统Calendar 日历日程(可获得当天以后可设定天数范围内的日历日程) (涉及指定日期时间判断是星期几的方法使用)的方法整理 目录 Android St ...

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

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

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

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

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

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

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

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

  9. android获取机主手机号,Android中 获取手机通讯录和手机机主手机号码——诺诺涂鸦记忆...

    目标:获取手机通讯录联系人的姓名和手机号码,屏幕座机和其他非手机号码,避免号码重复 (注:我只给出了代码思路和用法示例,大家可以自己调用方法debug运行看结果或者自行编写显示结果的代码,根据需要进行 ...

最新文章

  1. php的基本语法和数据类型
  2. Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)
  3. java 反序列化 ysoserial exploit/JRMPListener 原理剖析
  4. 中职计算机专业论文,中职教学中计算机专业论文
  5. pptpd免radius限速、限连接+自由定制功能脚本
  6. **Java有哪些悲观锁的实现_Redis 分布式锁的正确实现方式(Java版)
  7. l2正则化python_机器学习入门之机器学习之路: python线性回归 过拟合 L1与L2正则化...
  8. PAT_B_1049_C++(20分)
  9. 1030. 完美数列(25)
  10. 部署java项目到阿里云服务器(centos7版本)
  11. n个人围成一圈指针c语言,C语言N个人围成一圈报数用二级指针实现,不用数组!...
  12. python网络通信基础-udp+NetAssist(网络调试助手)
  13. Microsoft Visio 2010 - 参与者 (actor) - 人的形状图标
  14. 怎么在服务器上显示u盘启动,电脑服务器怎么设置U盘启动
  15. maximo工作笔记
  16. Keil5 编译时显示..\OBJ\TPAD.axf: error: L6002U: Could not open file ..\obj\main.o: No such file or direct
  17. 金融量化数据接口API汇总
  18. X86中断-异常-APIC
  19. JavaScript基础教程
  20. window统计连接数

热门文章

  1. 上传身份证照片js_js上传身份证正反面
  2. XenApp_XenDesktop_7.6实战篇之一:走进桌面虚拟化世界
  3. Vimeo高级API:使用SCRIBE在JAVA中搜索公共视频
  4. 卡尔曼滤波与航迹融合
  5. hibernate入门项目(一)
  6. 3108 小明爱换钱
  7. 验证与github是否连接成功.
  8. Android 获取IMEI码
  9. win10电脑发现不了华为share_电脑发现不了华为分享?
  10. Magic Leap开发指南(3)-- 将你的Cube投递给其他用户