Android获取手机联系人列表的方法

本文实例为大家分享了Android获取手机联系人列表的具体代码,供大家参考,具体内容如下

下面直接贴代码

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.好了这样的话就已经完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 实现列表倒计时功能

    单个计时器,然后遍历数据 刷新条目: 两种实现方式:1.Handler轮询: 2.子线程睡眠(时间到后 移除列表中的条目会有问题): 代码很简单,没有任何难度,列表使用 RecyclerView+BaseRecyclerViewAdapterHelper实现: implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHel

  • Android如何解析异构列表

    前言 开发业务需求时,遇到了列表中包含完全不同类型的数据结构.这种列表我们称为异构列表.以聊天记录列表为例 [ { "msgType" : "text", "id" : "1", "content" : "Hello world" }, { "msgType" : "record", "id" : "2",

  • Android列表RecyclerView排列布局

    本文实例为大家分享了Android列表RecyclerView排列布局的具体代码,供大家参考,具体内容如下 效果图: 1.要添加相关的依赖 implementation 'androidx.recyclerview:recyclerview:1.1.0' 2.然后布局文件中准备容器 这个标签是显示目标容器对象的,其他需求可自定义 <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_list" android

  • Android实现多级树形选择列表

    项目中有多个地方要用到多级列表的菜单,最开始我用的是ExpandableListView,但问题是ExpandableListView只支持两级列表,于是我就用ExpandableListView嵌套ExpandableListView,但非常麻烦,而且关键的是具体分几级是不确定的,也就是可能一级,可能多级,这要是五六级嵌套ListView,于是我就去学习鸿洋大神之前写的一篇关于实现Android多级树形列表的文章,实现很巧妙,使用一个ListView就可以实现多级列表效果,我做了部分修改,功能

  • Android仿抖音列表效果

    本文实例为大家分享了Android仿抖音列表效果的具体代码,供大家参考,具体内容如下 当下抖音非常火热,是不是也很心动做一个类似的app吗? 那我们就用RecyclerView实现这个功能吧,关于内存的回收利用就交给RecyclerView就好了. 首先我们先说3个和视频播放暂停相关的接口 public interface OnViewPagerListener { /** * 初始化 */ void onInitComplete(View view); /** * 释放 */ void onP

  • Android仿抖音右滑清屏左滑列表功能的实现代码

    概述 ​ 项目中要实现仿抖音直播间滑动清屏,侧滑列表的功能,在此记录下实现过程和踩坑记录希望避免大家走些弯路,也当作自己的一个总结 ​ 首先看下Demo中的效果 ​ 阅读文章需要提前熟悉些事件分发的内容,相信大家都已经了解过了,网上也有很多优秀的文章,这里推荐两篇自己读过印象较深的文章 https://www.jb51.net/article/124249.htm https://www.jb51.net/article/124861.htm 关于这方面的知识,在Android中是再重要不过的了

  • Android ListView列表实现倒计时

    本文实例为大家分享了Android ListView列表实现倒计时的具体代码,供大家参考,具体内容如下 效果图: 1. Activity package com.s296267833.ybs.activity.firstPage.timedown; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import com.s296267

  • Android保存的文件显示到文件管理的最近文件和下载列表中的方法

    发现Android开发每搞一个和系统扯上关系的功能都要磨死人,对新手真不友好.运气不好难以快速精准的找到有效的资料

  • 解决Android-RecyclerView列表倒计时错乱问题

    前言 转眼间距离上次写博客已是过了一个年轮,期间发生了不少事:经历了离职.找工作,新公司的第一版项目上线.现在总算是有时间可以将遇到的问题梳理下了,后期有时间也会分享更多的东西-- 场景 今天分享的问题是当在列表里面显示倒计时,这时候滑动列表会出现时间显示不正常的问题.首先关于倒计时我们需要注意的问题有以下几方面: 在RecyclerView中ViewHolder的复用导致的时间乱跳的问题. 滑动列表时倒计时会重置的问题. 在退出页面后定时器的资源释放问题,这里我使用的是用系统自带的CountD

  • Android获取手机联系人列表的方法

    本文实例为大家分享了Android获取手机联系人列表的具体代码,供大家参考,具体内容如下 下面直接贴代码 1.先写一个实体类,来放名字和号码 public class PhoneDto { private String name; //联系人姓名 private String telPhone; //电话号码 public String getName() { return name; } public void setName(String name) { this.name = name;

  • Android 获取手机联系人实例代码详解

    我的风格,废话不多说了,直接给大家贴代码了. 具体代码如下所示: package com.org.demo.demo; import com.org.wangfeng.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Butt

  • Android获取手机联系人的方法

    Android 获取系统联系人信息的实例 一.获取手机联系人姓名及手机号 //跳转到系统联系人应用 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); try { startActivityForResult(intent, Contacts1RequestCode); } catch (Exception e) { LogManager.e("打开联系人信息失败"

  • Android获取手机联系人信息

    Android如何获取手机联系人信息,本文为大家揭晓. 获取手机联系人信息步骤: 1.获取 ContentResolver ContentResolver resolver = getContentResolver(); 2.resolver.query(*)查询信息 查询手机联系人的URI:ContactsContract.RawContacts.CONTENT_URI 查询手机联系人手机号的URI:ContactsContract.CommonDataKinds.Phone.CONTENT_

  • Android获取手机通话记录的方法

    Android如何获取手机通话记录,本文为大家揭晓. 获取手机通话记录流程: 1. 获取ContentResolver; ContentResolver resolver = getContentResolver(); 2.resolver.query(*); 需要传入通话记录的URI:CallLog.Calls.CONTENT_URI 3.对查询得到的Cursor进行数据获取. 主要代码如下: MainActivity.java package com.noonecode.contentres

  • Android获取手机联系人电话号码并返回结果

    之前做了一个小练习需要用到获取手机里联系人的电话号码,通过查阅相关的资料,自己尝试写了一个小例子,可以成功获取. 首先需要在AndroidManifest.xml中获取权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> xml布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

  • 详解Android 获取手机中微信聊天记录方法

    首先我们要知道,微信的聊天记录一般是不提供给我们获取的,所以一般情况下我们手机没root的话就拿不到了.就算是root后的手机,想要获取微信的EnMicroMsg.db文件并且解密它.打开它也有点难度. 下面我们就来演示怎么从安卓设备的手机中拿到微信的数据文件吧~ 实验软件 :Android Studio实验设备:Root过的真机一部一.拿到数据库文件EnMicroMsg.db 一步步来,打开Android Studio的File Explorer:Tools –> Android –> An

  • android获取手机唯一标识的方法

    复制代码 代码如下: import android.provider.Settings.Secure; private String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID); UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hash

  • Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    android获取手机通讯录联系人信息 复制代码 代码如下: private void getPhoneContacts() {        ContentResolver resolver = this.getContentResolver();                // 获取手机联系人       Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,                  new String[] { Phone

  • Android使用AsyncQueryHandler实现获取手机联系人功能

    利用AsyncQueryHandler能异步任务获取手机联系人,增加用户体验,使用起来也很方便.不多说,上干货. 布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a

随机推荐