Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >读取联系人

读取联系人

作者头像
Dream城堡
发布于 2018-12-19 09:11:08
发布于 2018-12-19 09:11:08
80000
代码可运行
举报
文章被收录于专栏:Spring相关Spring相关
运行总次数:0
代码可运行

读取联系人

新建项目ContactsTest
修改activity_main.xml:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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.example.contactstest.MainActivity">

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

</LinearLayout>
修改MainActivity:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.contactstest;

import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    ArrayAdapter<String> adapter;

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

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView cantactsView = (ListView) findViewById(R.id.contacts_view);

        adapter =   new  ArrayAdapter<String>(
                 this,android.R.layout.simple_list_item_1,
                 contactsList
         );
        cantactsView.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{
            cursor =   getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null
            );

            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
                    ));
           contactsList.add(displayName+"\n"+number);
                }
                adapter.notifyDataSetChanged();
            }



        }catch (Exception e){
            e.printStackTrace();
        }finally {
            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_LONG).show();
                }

                break;
            default:


        }



    }
}
AndroidManifest.xml添加权限:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【详解】AndroidContentResolver查询的三种方式
在Android开发中,​​ContentResolver​​ 是一个非常重要的组件,它用于访问和操作其他应用程序的数据。通过 ​​ContentResolver​​,我们可以跨应用查询、插入、更新和删除数据。本文将详细介绍 ​​ContentResolver​​ 查询数据的三种方式。
大盘鸡拌面
2025/07/02
1390
跨程序共享数据——Content Provider 之 ContentResolver基本用法 & 一个读取系统联系人的Demo
本模块共有四篇文章,参考郭神的《第一行代码》,对Content Provider的学习做一个详细的笔记,大家可以一起交流一下:
凌川江雪
2018/09/13
1.5K0
跨程序共享数据——Content Provider  之  ContentResolver基本用法 & 一个读取系统联系人的Demo
Android中ContentProvider的用法
在Android中,如果要将一个程序的数据共享给另一个程序,在之前的Android版本,我们可以设置Android文件和SharedPreferences操作的两个模式:MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 这两种模式来使得数据可以被其他应用程序读写,但是这两种模式在在Android4(具体4.几也不记得了。。。)的时候就被废除了,那么现在要在不同的Android程序之间共享数据的话就只能通过ContentProvider(内容提供器)来实现了(排除你是黑客的前提下)。 下面来看一下怎么来读取其他Android程序的数据。
指点
2019/01/18
2.1K0
Android中ContentProvider的用法
Android Contacts(一)—— 读取联系人
Learn to work with the Android contacts database. Basic knowledge of accessing SQLite in Android along with using Cursors is expected. See the Android SQLite and Cursor Article for more information. Google changed the contacts database moving from 1.x to 2.0 versions of Android. This tutorial will be broken into 3 sections. First covering accessing contacts in Android 2.0. The second page will deal with accessing the contacts in Android 1.6 and before. Third we'll glue it all together with a class that abstracts specific classes for each version and a set of classes to manage the data from the contact records.
阳光岛主
2019/02/19
1.1K0
Android Contacts(一)—— 读取联系人
使用ListView自定义布局
ListView这个控件实际上是很难用的,就是因为它很多细节可以优化,效率就是比较重要的一点.下面我们来优化下它的效率:
Dream城堡
2018/12/14
1K0
使用ListView自定义布局
Android笔记: 获取手机联系人列表
下面直接贴代码 1.先写一个实体类,来放名字和号码 public class PhoneDto { private String name; //联系人姓名 private String telPhone; //电话号码 public String getName() { return name; } public void setNam
程思扬
2022/01/11
7280
Android笔记: 获取手机联系人列表
Android学习--跨程序共享数据之内容提供其探究
      跨程序共享数据之内容提供器,这是个什么功能?看到这个名称的时候最能给我们提供信息的应该是“跨程序”这个词了,是的重点就是这个词,这个内容提供器的作用主要是用于在不同的引用程序之间实现数据共享的功能,它提供了一完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性,在目前使用内容提供器是Android实现跨程序共享数据的标准方式。不同于文件存储和SharePreferences存储中的两种全局可读性操作模式,内容提供器可以选择只对那一部分数据进行共享,从而保证我们程序中的隐私数据不糊有泄漏的风险。
Mr.RisingSun
2018/08/20
6900
Android学习--跨程序共享数据之内容提供其探究
android学习笔记----短信发送器
短信发送器demo地址:https://github.com/liuchenyang0515/SmsSend
砖业洋__
2023/05/06
5890
android学习笔记----短信发送器
Android系统联系人全特效实现(上),分组导航和挤压动画
本文介绍了如何在Android系统上实现联系人的全特效,包括分组、背景、动画以及字母表滚动等效果。通过自定义列表视图和自定义动画实现分组和滚动效果,并提供了完整的代码示例和GIF动态展示。
用户1158055
2018/01/05
1.3K0
Android系统联系人全特效实现(上),分组导航和挤压动画
黑客是如何监视你的手机的?
基础环境:win10,Android studio 3,jd-gui,apktool,dex2jar
FB客服
2018/07/30
1.2K0
黑客是如何监视你的手机的?
Android最常用的控件ListView(详解)
在Android开发中,ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。
全栈程序员站长
2022/09/15
5.2K0
Android最常用的控件ListView(详解)
相关推荐
【详解】AndroidContentResolver查询的三种方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档