Android内容提供者(读取手机联系人信息)
工程目录:
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内容提供者(读取手机联系人信息)相关推荐
- android 使用内容提供者获取手机联系人
最近在学习安卓的相关内容, 正好在写获取手机联系人的程序, 就想到了内容提供者, 这里有几点需要注意, 写到这里, 以后方便自己查询. 1. 手机联系人的数据库是存储在 data/data/com.a ...
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...
- Android程序如何读取手机联系人
导出手机联系人数据库,找到数据的存储结构 数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表: ...
- Android使用READ_CONTACTS读取手机联系人
实例代码: package com.example.readcontacts;import java.io.InputStream; import java.util.ArrayList;import ...
- android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...
- java 添加手机联系人_Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结...
本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 ...
- Android 保存号码至已有联系人,新建联系人,读取手机联系人
添加必要的权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> & ...
- 读取手机联系人简单方法(id,姓名,手机号)
<uses-permission android:name="android.permission.READ_CONTACTS"/> 布局文件 <?xml ver ...
- 通过内容提供者获取手机上的音乐资源
当我们要获取手机上的某一种资源的时候,如果直接遍历手机上的文件,这样既浪费大量时间也会占用手机大量的资源,这是一种得不偿失的做法.这篇文章在我吸取了大牛们的经验和实践来的. 今天跟大家讲讲如何通过内容 ...
最新文章
- Caffe源码中common文件分析
- 如果你需要对对话框上的一个按钮进行鼠标停靠提示
- 高级经济师计算机水平考试,【2017上海高级经济师评审职称外语、计算机成绩不再为前置条件】- 环球网校...
- 软件工程概论---典型用户和用户场景描述
- jQuery的实现原理
- (204)浮点数的表示
- Hurdles of 110m ZOJ - 2972 (简单DP)
- 【279天】每日项目总结系列017(2017.11.11)
- MAC上安装JDK后的所在目录
- 一字之差——手机中的“拼”音输入法和“注”音输入法
- 【windows】修复win7便签
- 视频处理中各个分辨率/数字电视系统显示格式 的介绍(QCIF,CIF,4CIF,D1,720P,1080I,1080P等)
- SpringCloud-Feign接口调用超时:feign.RetryableException: Connection timed out (Connection timed out) execut
- 七类人不适合学计算机,考研女生谨慎报考!这几个专业可能真的不适合!
- ElementUI TimePicker固定时间范围,开始时间小于结束时间
- 【高精度定位】关于GPS、RTK、PPK三种定位技术的探讨
- 大数据----Hive学习(6)----Hive 基本操作4
- 测试面试挫败_清晰度,初级工程师,要求和挫败感
- 【洛谷P1605 迷宫】
- mongoDb中_id和ObjectId详细说明