工程目录:

Manifestes加入读取联系人权限

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

MainActivity

package com.example.myapplication;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivity {private ListView listView;private SimpleAdapter listAdapter;Cursor cursor;private HashMap<String, String> item;private List<Map<String, String>> data;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);}else{fun();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if(grantResults.length>0){if(grantResults[0]== PackageManager.PERMISSION_GRANTED) {fun();} else{Toast.makeText(this, "权限不足!", Toast.LENGTH_SHORT).show();finish();  //主动销毁当前Activity界面(不同于用户按返回键)}}}public  void fun(){listView=findViewById(R.id.listView);data = new ArrayList<Map<String,String>>();//获取手机联系人的Uri,相当于提供了一个公共的数据库链接Uri uri= ContactsContract.Contacts.CONTENT_URI;cursor=getContentResolver().query(uri, null, null, null, null);TextView textView=findViewById(R.id.textView);textView.setText("读取到"+cursor.getCount()+"个联系人");while(cursor.moveToNext()){//获取联系人的idint idFieldIndex=cursor.getColumnIndex("_id");int id=cursor.getInt(idFieldIndex);//获取联系人的名字int nameFieldIndex  = cursor.getColumnIndex("display_name");String name=cursor.getString(nameFieldIndex);//获取联系人的电话号码个数int numCountFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);int numCount=cursor.getInt(numCountFieldIndex);String phoneNumber="";if(numCount>0){Cursor phonecursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?",new String[]{Integer.toString(id)}, null);if(phonecursor.moveToFirst()){     //仅读取第一个电话号码int numFieldIndex=phonecursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);phoneNumber=phonecursor.getString(numFieldIndex);}}item=new HashMap<String,String>();item.put("name", name);item.put("phoneNumber", phoneNumber);data.add(item);}listAdapter=new SimpleAdapter(this,data,android.R.layout.simple_list_item_2,  //使用Android自带的列表布局new String[]{"name","phoneNumber"},new int[]{android.R.id.text1,android.R.id.text2});listView.setAdapter(listAdapter);}
}

layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView" /><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Android内容提供者(读取手机联系人信息)相关推荐

  1. android 使用内容提供者获取手机联系人

    最近在学习安卓的相关内容, 正好在写获取手机联系人的程序, 就想到了内容提供者, 这里有几点需要注意, 写到这里, 以后方便自己查询. 1. 手机联系人的数据库是存储在 data/data/com.a ...

  2. Android项目——读取手机联系人信息

    加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...

  3. Android程序如何读取手机联系人

    导出手机联系人数据库,找到数据的存储结构 数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表: ...

  4. Android使用READ_CONTACTS读取手机联系人

    实例代码: package com.example.readcontacts;import java.io.InputStream; import java.util.ArrayList;import ...

  5. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  6. java 添加手机联系人_Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结...

    本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 ...

  7. Android 保存号码至已有联系人,新建联系人,读取手机联系人

    添加必要的权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> & ...

  8. 读取手机联系人简单方法(id,姓名,手机号)

    <uses-permission android:name="android.permission.READ_CONTACTS"/> 布局文件 <?xml ver ...

  9. 通过内容提供者获取手机上的音乐资源

    当我们要获取手机上的某一种资源的时候,如果直接遍历手机上的文件,这样既浪费大量时间也会占用手机大量的资源,这是一种得不偿失的做法.这篇文章在我吸取了大牛们的经验和实践来的. 今天跟大家讲讲如何通过内容 ...

最新文章

  1. Caffe源码中common文件分析
  2. 如果你需要对对话框上的一个按钮进行鼠标停靠提示
  3. 高级经济师计算机水平考试,【2017上海高级经济师评审职称外语、计算机成绩不再为前置条件】- 环球网校...
  4. 软件工程概论---典型用户和用户场景描述
  5. jQuery的实现原理
  6. (204)浮点数的表示
  7. Hurdles of 110m ZOJ - 2972 (简单DP)
  8. 【279天】每日项目总结系列017(2017.11.11)
  9. MAC上安装JDK后的所在目录
  10. 一字之差——手机中的“拼”音输入法和“注”音输入法
  11. 【windows】修复win7便签
  12. 视频处理中各个分辨率/数字电视系统显示格式 的介绍(QCIF,CIF,4CIF,D1,720P,1080I,1080P等)
  13. SpringCloud-Feign接口调用超时:feign.RetryableException: Connection timed out (Connection timed out) execut
  14. 七类人不适合学计算机,考研女生谨慎报考!这几个专业可能真的不适合!
  15. ElementUI TimePicker固定时间范围,开始时间小于结束时间
  16. 【高精度定位】关于GPS、RTK、PPK三种定位技术的探讨
  17. 大数据----Hive学习(6)----Hive 基本操作4
  18. 测试面试挫败_清晰度,初级工程师,要求和挫败感
  19. 【洛谷P1605 迷宫】
  20. mongoDb中_id和ObjectId详细说明

热门文章

  1. 计算机视觉 AI 工具集 OpenVINO™,是你心目中的深度学习框架 Top1 吗?
  2. 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!
  3. 华为鸿蒙 OS 2020 计划曝光!手机仍然优先用安卓
  4. 2019 年一千多万条数据遭泄露!
  5. 国际顶级学界和工业界大咖云集、AIoT 实训营,你不可错过的嵌入式 AI 盛会!...
  6. 程序员,活得是本事:30 岁后的 20 条人生建议
  7. 微软 Build 2019 对开发者意味着什么?
  8. 可折叠的 iPhone 要来了?
  9. Python 爬下的必胜客数据背后,藏着什么样的信息?
  10. 有哪些神预言的科幻电影