• Android获取通讯录


    在开发应用中,经常要获取本地手机的通讯录,特别是sns相关类的应用。因为通讯录属于隐私,所以在开发过程中如果要获取通讯录应该征求用户的同意。
    通讯录一般存在两个地方,一个是本地手机上,一个是存在sim卡上。
    下面分别讨论一下怎样获取这两个地方的联系人。(在这里我只获取联系人name 和number)
    android通过contentProvider将通讯录的数据暴露出来,所以只要有一个正确的URI就可以通过contentprovider获取到通讯录数据。
    贴代码:

     1 //取本机通讯录
     2 public static HashMap<String, ContractInfo> getPhoneContracts(Context mContext){
     3 HashMap<String, ContractInfo> map = new HashMap<String, ContractInfo>();
     4 ContentResolver resolver = mContext.getContentResolver();
     5 // 获取手机联系人 
     6 Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,null, null, null, null); //传入正确的uri
     7 if(phoneCursor!=null){
     8 while(phoneCursor.moveToNext()){
     9 int nameIndex = phoneCursor.getColumnIndex(Phone.DISPLAY_NAME); //获取联系人name
    10 String name = phoneCursor.getString(nameIndex);
    11 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); //获取联系人number
    12 if(TextUtils.isEmpty(phoneNumber)){
    13 continue;
    14 }
    15 //以下是我自己的数据封装。
    16 ContractInfo contractInfo = new ContractInfo();
    17 contractInfo.setName(name);
    18 contractInfo.setPhoneNumber(getNumber(phoneNumber));
    19 contractInfo.setFrom(PHONE);
    20 map.put(getNumber(phoneNumber), contractInfo);
    21 }
    22 phoneCursor.close();
    23 }
    24 return map;
    25 }
    26 
    27 
    28 接下来看获取sim卡的方法,sim卡的uri有两种可能content://icc/adn与content://sim/adn (一般情况下是第一种)
    29 public static HashMap<String, ContractInfo> getSimContracts(Context mContext){
    30 //读取SIM卡手机号,有两种可能:content://icc/adn与content://sim/adn
    31 HashMap<String, ContractInfo> map = new HashMap<String, ContractInfo>();
    32 
    33 ContentResolver resolver = mContext.getContentResolver();
    34 Uri uri = Uri.parse("content://icc/adn");
    35 Cursor phoneCursor = resolver.query(uri,null, null, null, null); 
    36 if(phoneCursor!=null){
    37 while(phoneCursor.moveToNext()){
    38 String name = phoneCursor.getString(phoneCursor.getColumnIndex("name"));
    39 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("number"));
    40 if(TextUtils.isEmpty(phoneNumber)){
    41 continue;
    42 }
    43 //以下是我自己的数据封装。
    44 ContractInfo contractInfo = new ContractInfo();
    45 contractInfo.setName(name);
    46 contractInfo.setPhoneNumber(getNumber(phoneNumber));
    47 contractInfo.setFrom(SIM);
    48 map.put(getNumber(phoneNumber), contractInfo);
    49 }
    50 phoneCursor.close();
    51 }
    52 return map;
    53 }
  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/akira90/p/2750282.html
Copyright © 2020-2023  润新知