软件编程
位置:首页>> 软件编程>> Android编程>> Android读取手机通讯录联系人到自己项目

Android读取手机通讯录联系人到自己项目

作者:MagicMHD  发布时间:2022-01-04 06:37:48 

标签:Android,读取,联系人

本文实例为大家分享了Android读取手机通讯录联系人到项目的具体代码,供大家参考,具体内容如下

一、主界面代码如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ListView
 android:id="@+id/contacts_view"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

</ListView>
</LinearLayout>

简单的添加了一个listview来展示待会读取到的通讯录数据。

二、MainAcitivity代码如下,代码中有详细注释!


public class MainActivity extends AppCompatActivity {

ArrayAdapter<String> adapter;

List<String> contactsList=new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

//获取到listview并且设置适配器
 ListView contactsView= (ListView) findViewById(R.id.contacts_view);
 adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
 contactsView.setAdapter(adapter);

//判断是否开启读取通讯录的权限
 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)!= PackageManager
   .PERMISSION_GRANTED){
  ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);
 }else {
  readContacts();
 }
}

private void readContacts() {
 Cursor cursor=null;
 try {
  //查询联系人数据,使用了getContentResolver().query方法来查询系统的联系人的数据
  //CONTENT_URI就是一个封装好的Uri,是已经解析过得常量
  cursor=getContentResolver().query(
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
    null,
    null,
    null,
    null
  );
  //对cursor进行遍历,取出姓名和电话号码
  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
    ));
    //把取出的两类数据进行拼接,中间加换行符,然后添加到listview中
    contactsList.add(displayName+"\n"+number);
   }
   //刷新listview
   adapter.notifyDataSetChanged();
  }
 }catch (Exception e){
  e.printStackTrace();
 }finally {
  //记得关掉cursor
  if (cursor!=null){
   cursor.close();
  }
 }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 switch (requestCode){
  case 1:
   if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
    readContacts();
   }else {
    Toast.makeText(this,"没有权限",Toast.LENGTH_SHORT).show();
   }
   break;
  default:
   break;
 }
}
}

三、由于读取通讯录属于危险权限,所以记得在Manifest中开启权限


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

来源:https://blog.csdn.net/MagicMHD/article/details/80863913

0
投稿

猜你喜欢

  • 这几天在上海出差,忙里偷闲学习了一下Apk的反编译工具的基本使用。下面就简单介绍一下如何将我们从网上下载的Apk文件进行反编译得到我们想要获
  • java 算法之快速排序实现代码摘要: 常用算法之一的快速排序算法的java实现原理:选择一个基准元素,通常选择第一个元素或者最后一个元素,
  • 这里我先简单描述一下需求:服务器返回的是html页面的一部分带有标签的内容。解决的思路是:将服务器返回的内容片段拼凑成一个完整的页面。下面直
  • 引入所谓泛型,就是创建一个函数,对所有数据类型都生效。最常见的例子就是运算符,毕竟1+1=2,1.0+1.0=2.0,足以看出+是对多种数据
  • 本文实例为大家分享了java实现在线聊天系统的具体代码,供大家参考,具体内容如下本博客是博主在观看相关视频后写下的代码,希望能够帮助大家掌握
  • 本文实例讲述了Android DigitalClock组件用法。分享给大家供大家参考,具体如下:DigitalClock组件的使用很简单,先
  • 一、前言在C#中,由于有了垃圾回收机制的支持,对象的析构和以前的C++有了很大的不同,这就要求程序员在设计类型的时候,充分理解.NET的机制
  • 一、单例模式的思想想整理一些 java 并发相关的知识,不知道从哪开始,想起了单例模式中要考虑的线程安全,就从单例模式开始吧。以前写过单例模
  • 解决方法有如下两种:第一种如果你 repo sync 了 android 的整个源码,那么可以直接把你的 app 放到 /packages/
  • 编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务
  • Android的主线程中执行长时间操作,导致界面无响应,会引起ANR。如果需要执行较长时间的操作,一般会在另一个线程处理,然后将数据转交给主
  • Android设备用久了,截屏是个麻烦事。更麻烦的是通过qq传到电脑上,倒腾半天。其实用adb命令就可以截屏,然后写个pull的语句就可以拉
  • 平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以
  • PS:在开发中我们会遇到一些图片处理问题,比如说缓存图片了、限制图片大小了、查看图片了等。上一篇文章介绍了图片的全景效果查看,今天介绍一个图
  • 使用过 mybatis 框架的小伙伴们都知道,mybatis 是个半 orm 框架,通过写 mapper 接口就能自动实现数据库的增删改查,
  • 这篇文章主要介绍了Java等待唤醒机制线程通信原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
  • 最近在学习AngularJS的知识,收获不少,不过因为自己平时工作时开发都是用的freemarker+springmvc来做的页面数据交互,
  • 前言上一篇文章用贝塞尔曲线画了一个看起来不错的小红点功能,技术上没什么难度,主要就是数学上的计算。这篇文章也差不多,模仿了一个常用的滑动解锁
  • 内容简介本篇将介绍 Flutter 中如何完成图片上传,以及上传成功后的表单提交。涉及的知识点如下:图片选择插件wechat_assets_
  • 1.scope 作用域Spring 管理的 bean 是根据 scope 来⽣成的,表示 bean 的作⽤域,共4种,默认值是 single
手机版 软件编程 asp之家 www.aspxhome.com