效果图

关键代码

activity_pick_contact

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.a00xiaoyugmailcom.myapplication.ConnectionSelectActivity"android:orientation="vertical"android:padding="20dp"><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"><TextView
            android:layout_width="80dp"android:layout_height="wrap_content"android:text="收货人"/><EditText
            android:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"><TextView
            android:layout_width="80dp"android:layout_height="wrap_content"android:text="手机号码"/><EditText
            android:id="@+id/et_phone"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><Button
        android:id="@+id/btn_select"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/shape_button_normal"android:text="选联系人"android:textColor="#ff0000"android:layout_marginTop="10dp"/></LinearLayout>

AndroidManifest

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

MainActivity

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class ConnectionSelectActivity extends AppCompatActivity implements View.OnClickListener {private EditText et_username;private EditText et_phone;private Button btn_select;private static final int PICK_CONTACT = 1;private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 2;private Intent mIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_pick_contact);et_username = findViewById(R.id.et_username);et_phone = findViewById(R.id.et_phone);btn_select = findViewById(R.id.btn_select);btn_select.setOnClickListener(this);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case PICK_CONTACT:mIntent = data;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {//申请授权,第一个参数为要申请用户授权的权限;第二个参数为requestCode 必须大于等于0,主要用于回调的时候检测,匹配特定的onRequestPermissionsResult。//可以从方法名requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);}else{//如果该版本低于6.0,或者该权限已被授予,它则可以继续读取联系人。getContacts(data);}break;default:super.onActivityResult(requestCode, resultCode, data);break;}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 用户成功授予权限getContacts(mIntent);} else {Toast.makeText(this, "你拒绝了此应用对读取联系人权限的申请!", Toast.LENGTH_SHORT).show();}}}@Overridepublic void onClick(View view) {selectConnection();}private void selectConnection() {Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);startActivityForResult(intent, PICK_CONTACT);}private void getContacts(Intent data) {if (data == null) {return;}Uri contactData = data.getData();if (contactData == null) {return;}String name = "";String phoneNumber = "";Uri contactUri = data.getData();Cursor cursor = getContentResolver().query(contactUri, null, null, null, null);if (cursor.moveToFirst()) {name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));if (hasPhone.equalsIgnoreCase("1")) {hasPhone = "true";} else {hasPhone = "false";}if (Boolean.parseBoolean(hasPhone)) {Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + id, null, null);while (phones.moveToNext()) {phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));}phones.close();}cursor.close();et_username.setText(name);et_phone.setText(phoneNumber);}}
}

Android选择联系人并返回对应号码相关推荐

  1. android 选择联系人右侧首字母显示

    我们都知道,我们在选择联系人时,右侧都能显示姓氏的首字母并能排序,今天我就谈下它的实现方式.效果见末页 1.自定义view public class PhoneBookSideBar extends ...

  2. Android发送短信(短信发送以及群发和从电话本选择联系人)---短信管家2

    分析下怎么写 首先,我们需要一个输入框,可以手动的输入手机号码, 其次,很少有人愿意手动输入,那么我们需要提供一个按钮来给我们的用户选择自己电话本中的联系人(一次可以选择多个即群发) 然后,我们需要一 ...

  3. Android仿微信实现快速索引选择联系人

    Android仿微信实现快速索引选择联系人 原创 2016年03月05日 13:19:20 1640 3 1 一.概述 先看效果图,然后在给大家慢慢介绍  二.实现 先给大家说说这些城市的数据是怎么来 ...

  4. Android 为同一个联系人添加多个号码

    一般来说,实现的都是添加一个联系人和对应的号码,但如果想为一个联系人添加多个号码怎么办,我找了半天都没有解决方法,最后自己看别人的通讯录得到启发,直接上代码.大家互相帮助才能进步. //往数据库中新增 ...

  5. Android contacts 联系人 通讯录 源码 完全解析

    Android contacts 联系人 通讯录 源码 完全解析 1简介 2软件架构 3各功能模块分析 1联系人数据的显示 1联系人列表显示 2联系人详细信息数据的显示 2联系人数据的编辑和存储 1编 ...

  6. Android 之联系人提供程序

    介绍 联系人提供程序是一个强大而又灵活的 Android 组件,用于管理设备上有关联系人数据的中央存储库. 联系人提供程序是您在设备的联系人应用中看到的数据源,您也可以在自己的应用中访问其数据,并可在 ...

  7. android查看联系人姓名和手机号码

    第一步:布局文件就是一个Button,点击弹出联系人列表,选择联系人后将联系人的信息显示在两个TextView上,布局代码很简单,此处不再给出. 第二步:调到联系人选择页面并返回所选择的联系人信息可以 ...

  8. Android VCard联系人备份恢复(导入/导出)详解

    原文地址为: Android VCard联系人备份恢复(导入/导出)详解 首先我们简单的看下在Android中联系人的存储结构. 工作环境:android 2.3.3 联系人的主要数据存放在raw_c ...

  9. Android系统设置联系人头像教程

    为什么80%的码农都做不了架构师?>>>    Android系统的手机是不支持编辑SIM卡上的联系人的,所以要设置联系人的头像也是没办法的,那么要怎么才能设置Android系统的联 ...

最新文章

  1. 百分点内存数据库架构演变
  2. Spring Boot 项目 RedisTemplate 实现轻量级消息队列
  3. iTerm2多个窗口同时输入命令
  4. SqlServer2008备份与还原(完整图示版)
  5. Win Linux 双系统安装指南
  6. java thread join()_Java中Thread.join()的使用方法
  7. 在JavaScript中创建命名空间的几种写法
  8. 【问题解决方案】The MathType Dll cannot be found 问题解决方案
  9. 2021年中国电动辅助电动机市场趋势报告、技术动态创新及2027年市场预测
  10. SSH 与 SFTP
  11. 计算机上安装了新的ie版本,win7电脑自带的IE11浏览器如何降级到IE8
  12. 爬取企业信息-企业信用信息查询系统-天眼查爬虫
  13. APP 应用内活动运营,有哪些活动形式?
  14. 小游戏开发怎么选游戏引擎
  15. 绝缘栅型n沟道场管_N沟道增强型绝缘栅场效应管的工作原理
  16. 实模式、保护模式和虚拟8086模式
  17. 【Android-I】Android开发之常见错误:Dx unsupported class file version 52.0...while parsing com/...
  18. Zxing生成二维码(可带图标)
  19. mysql 用触发器定时任务_MYSQL定时任务 触发器
  20. UG/NX二次开发Siemens官方NXOPEN实例解析—1.2 BlockStyler/EditExpression

热门文章

  1. linux操作系统定制的目的是,Linux操作系统在定制PMP DM320的应用解析
  2. 王者外服服务器为响应,王者荣耀外服叫什么 外服版进入方法详解[多图]
  3. CSS textarea前的文字设置为左上角
  4. python生成环形树状图-networkx
  5. linux的more命令
  6. 视频教程-Office 365入门课程-云平台
  7. 股东刚减持,股价却起飞?用Python量化A股解禁数据,利空出尽是利好? | 邢不行
  8. win10装vc6.0
  9. 关于 Oracle ACFS 相关知识的简单学习
  10. 黑客如何掩盖 Linux 服务器上的操作痕迹