zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    2019/2/3从字符串中删除指定的字符
    2019/2/3求组合数
    2019/2/3统计各成绩段的学生人数
    2019/2/3摄氏一华氏温度转换表
    2019/1/29有选择的复制字符串
    2019/1/28数字的移动
    2019/1/2810个整数的数据处理
    2019/1/27从三个数中找出最大的数(函数和宏)
    2019/1/23编写函数统计字符串中字母、数字、空格和其它字符的个数
    Jenkins 执行python脚本
  • 原文地址:https://www.cnblogs.com/akira90/p/2750282.html
Copyright © 2011-2022 走看看