Android获取手机通讯录的信息(姓名和改姓名下的所有手机号)

news/2024/11/16 17:59:58/

Android获取手机通讯录的信息(姓名和改姓名下的所有手机号

  • 1.实现过程
  • 2.实现代码

1.实现过程

1 定义一个专门存储信息的对象类,有姓名,首字母和手机号列表
2 通过获取手机的读写权限,然后来获取手机通讯录信息

2.实现代码

1.对象存储类

import java.util.List;public class ContactsBean {private String fullName;private List<String> phoneList;private String namePrefix;public String getNamePrefix() {return namePrefix;}public void setNamePrefix(String namePrefix) {this.namePrefix = namePrefix;}public String getFullName() {return fullName;}public void setFullName(String fullName) {this.fullName = fullName;}public List<String> getPhoneList() {return phoneList;}public void setPhoneList(List<String> phoneList) {this.phoneList = phoneList;}
}

2.获取手机通讯录对象信息实现类

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;import com.hjq.permissions.OnPermission;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;import org.jetbrains.annotations.NotNull;import java.util.ArrayList;
import java.util.List;public class ContactUtils {//(实际上就是“sort_key”字段) 出来是首字母private static final String PHONE_BOOK_LABEL = "phonebook_label";//需要查询的字段private static final String[] CONTACTOR_ION = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,};private static List<ContactsBean> number = new ArrayList<>();public static List<ContactsBean> getAllContacts(Activity context) {if (XXPermissions.isHasPermission(context, Permission.READ_CONTACTS,Permission.WRITE_CONTACTS)) {number = getNumber(context);}else {XXPermissions.with(context).constantRequest() //可设置被拒绝后继续申请,直到用户授权或者永久拒绝.permission(Permission.READ_CONTACTS,Permission.WRITE_CONTACTS) //不指定权限则自动获取清单中的危险权限.request(new OnPermission() {@Overridepublic void hasPermission(List<String> granted, boolean isAll) {number = getNumber(context);}@Overridepublic void noPermission(List<String> denied, boolean quick) {}});}return number;}@NotNullprivate static List<ContactsBean> getNumber(Context context) {List<ContactsBean> contacts = new ArrayList<>();String sortOrder =  ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY;Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder);if (cursor != null) {while (cursor.moveToNext()) {List<String> allNumber =new ArrayList<>();ContactsBean info = new ContactsBean();String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String firstChar = cursor.getString(cursor.getColumnIndex(PHONE_BOOK_LABEL));int numberCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));if (numberCount > 0) {Cursor phoneNumberCursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{id}, null);while (phoneNumberCursor.moveToNext()) {String phoneNumber = phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));if (!allNumber.contains(phoneNumber)) {allNumber.add(phoneNumber);info.setPhoneList(allNumber);}}if (phoneNumberCursor != null) {phoneNumberCursor.close();}}info.setFullName(name);//添加名字info.setNamePrefix(firstChar.toLowerCase());//首字母info.setPhoneList(allNumber);//所有号码contacts.add(info);}cursor.close();}return contacts;}
}

3.主函数方法调用即可

List<ContactsBean> list=ContactUtils.getAllContacts(getActivity());

http://www.ppmy.cn/news/720607.html

相关文章

获取iPhone手机当前连接的WiFi名称

直接上代码 #import <ifaddrs.h> #import <arpa/inet.h> #import <SystemConfiguration/CaptiveNetwork.h> (NSString *)wifiName{NSString *wifiName "Not Found";CFArrayRef myArray CNCopySupportedInterfaces();if (myArray ! nil) {CFDict…

获取手机上其他应用的图标,名字。用RecyclerView整合

左一效果图。左2MainActivity ---------------------------------//app信息工具类--------------------------------------- import android.graphics.drawable.Drawable; import java.io.Serializable; public class AppInfo implements Serializable {/** 序列号 */private…

大神救救我 手机通讯录 输3之后输个名字就运行不了了

#include<stdio.h> #include<stdlib.h> #include<windows.h> #include<assert.h>//用来解决程序终止问题&#xff0c;查阅网上资料得到 #define M 100 #define N1 20 #define N2 30 #define N3 30 char title[100]; void OPEN();//总运行 void menu1()…

安卓手机搭建一个服务器:按名字查询成绩

前提说明 使用PC机搭建一个服务器比较方便。其实手机端的文件互传更为普遍&#xff0c;最早的快牙&#xff0c;到现在的QQ面对面、小米快传、屏幕投射&#xff0c;都能通过“同一个WiFi”&#xff0c;又快又好地干许多意想不到的事。而将这一特性用于单独的移动端服务器还不普…

获取Android手机的手机名称

获取手机名称 BluetoothAdapter myDevice BluetoothAdapter.getDefaultAdapter();String deviceName myDevice.getName(); 上面的代码需要android.permission.BLUETOOTH权限

Android基础篇 查询当前运行的APP包名以及查询手机APP包名

一、包名概念 以及 签名的作用 包名&#xff08;Package name&#xff09;在Android系统中是判断一个App的唯一标识&#xff0c;不同的App可以有同样的名字&#xff0c;但是它的包名不可以相同 例如我可以自己编译生成一个App也叫“微信”&#xff0c;但是我App的包名不能为com…

请输入你的名字

package day03;public class Day03_Test01_Input02 {public static void main(String[] args) {// 1.生成input 输入方法 ; 表示语句结束 一定要写java.util.Scanner input new java.util.Scanner(System.in);System.out.println("请输入你的姓名&#xff1a;");//…

Java随机生成名字大全 手机号

有些项目要求实现随机生成人名&#xff0c;这里我用java实现&#xff0c;姓与名分开&#xff0c;最后组合在一起&#xff0c;话不多说&#xff0c;直接看代码。&#xff08;此源码借鉴与网上多个博客资源和自己的一点想法&#xff09; 第一种 public class Mytest1 { public …