cocos 获取手机通讯录

package com.enhance.gameservice;

import java.io.InputStream;
import java.net.URLDecoder;
import java.util.ArrayList;

import org.cocos2dx.javascript.AppActivity;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.text.TextUtils;

//获取手机通讯录
public class ObtainMobilePhoneAddressBook {



    // 获取库Phon表字段  只去表中找 显示名称 电话号码 头像ID 联系人ID 这4个数据 ,如果你须要其它数据 的话 就须要修改这里。
    private static final String[] PHONES_PROJECTION = new String[] {
            Phone.DISPLAY_NAME, Phone.NUMBER, Phone.PHOTO_ID, Phone.CONTACT_ID };

    /*联系人显示名称*/
    private static final int PHONES_DISPLAY_NAME_INDEX = 0;

    /*电话号码*/
    private static final int PHONES_NUMBER_INDEX = 1;

    /*头像ID*/
    private static final int PHONES_PHOTO_ID_INDEX = 2;

    /*联系人的ID*/
    private static final int PHONES_CONTACT_ID_INDEX = 3;


      /**联系人名称**/  
    private ArrayList<String> mContactsName = new ArrayList<String>();  

    /**联系人头像**/  
    private ArrayList<String> mContactsNumber = new ArrayList<String>();  

    /**联系人头像**/  
    private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();  

    private static ObtainMobilePhoneAddressBook _instance = null;

    public static ObtainMobilePhoneAddressBook getInstance(){
        if(_instance == null){
            _instance = new ObtainMobilePhoneAddressBook();
        }
        return _instance;
    }


    public static void refreshContacesList (){
        System.out.println("refreshContacesList  --------------------------  ");
        _instance.mContactsName.clear();
        _instance.mContactsNumber.clear();
        _instance.mContactsPhonto.clear();
        _instance.getPhoneContacts();
        _instance.getSIMContacts();
    }

    /**得到手机通讯录联系人信息**/  
    private void getPhoneContacts() {

        // ContentResolver s存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法
        ContentResolver resolver = AppActivity.getInstanceActivity()
                .getContentResolver();

        /**
         * Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。
         * Cursor 是一个随机的数据源。 所有的数据都是通过下标取得。
         * 
         * 
         * Phone.CONTENT_URI,获取联系人的时候需要去这个url中去找数据 。 它所指向的其实是“content://
         * com.android.contacts/data/phones” 。这个url 对应着contacts表 和 raw_contacts表
         * 以及 data表 所以说我们的数据都是从这三个表中获取的。
         * 
         * 
         * */
        Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
                PHONES_PROJECTION, null, null, null);
        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {
                //得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);

                //当手机号码为空的或者为空字段 跳过当前循环  
                if (TextUtils.isEmpty(phoneNumber))  
                    continue;  

                //得到联系人名称  
                String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);  

                //得到联系人ID  
                Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);

                //得到联系人头像ID  
                Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);  

                //得到联系人头像Bitamp  
                Bitmap contactPhoto = null;  

                //photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的  
                if(photoid > 0){
                      Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);  
                      InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);  
                      contactPhoto = BitmapFactory.decodeStream(input);  
                }else{
                    contactPhoto = AppActivity.getInstanceActivity().getImageFromAssetsFile("res/head.png");
                }

//              try {
//                  contactName = URLDecoder.decode(contactName, "UTF-8");  
//              } catch (Exception e) {
                    // TODO: handle exception
//                  System.out.println("转码 err s--- " + e);
//              }

                System.out.println("手机通讯录  姓名:" + contactName + " 手机号:" + phoneNumber);
                mContactsName.add(contactName);  
                mContactsNumber.add(phoneNumber);  
                mContactsPhonto.add(contactPhoto); 

            }
            phoneCursor.close();  
        }
    }

    /**得到手机SIM卡联系人人信息**/  
    private void getSIMContacts(){
         ContentResolver resolver = AppActivity.getInstanceActivity().getContentResolver();  
            // 获取Sims卡联系人  
            Uri uri = Uri.parse("content://icc/adn");  
            Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,  
                null);  

            if (phoneCursor != null) {  
                while (phoneCursor.moveToNext()) {  

                // 得到手机号码  
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);  
                // 当手机号码为空的或者为空字段 跳过当前循环  
                if (TextUtils.isEmpty(phoneNumber))  
                    continue;  
                // 得到联系人名称  
                String contactName = phoneCursor  
                    .getString(PHONES_DISPLAY_NAME_INDEX);  

                //Sim卡中没有联系人头像  
                System.out.println("手机SIM  姓名:" + contactName + " 手机号:" + phoneNumber);
                mContactsName.add(contactName);  
                mContactsNumber.add(phoneNumber);  
                }
                phoneCursor.close();  
            }
    }

}






public Bitmap getImageFromAssetsFile(String fileName)  
      {  
          Bitmap image = null;  
          AssetManager am = getResources().getAssets();  
          try  
          {  
              InputStream is = am.open(fileName);  
              image = BitmapFactory.decodeStream(is);  
              is.close();  
          }  
          catch (IOException e)  
          {  
              e.printStackTrace();  
          }  

          return image;  

      } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值