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;
}
cocos 获取手机通讯录
最新推荐文章于 2019-05-01 16:07:46 发布