我的数据库2

来源:互联网 发布:热力学分析软件ipeak 编辑:程序博客网 时间:2024/04/29 22:11
 public class ContactManager
{
    private final Context context;
   
    private final ContentResolver contentResolver;
   
    private Resources resources = null;
   
    /**
     * 家庭
     */
    private String typeHome = "";
   
    /**
     * 手机
     */
    private String typeMobile = "";
   
    /**
     * 单位
     */
    private String typeWork = "";
   
    /**
     * 已拨
     */
    private String typeOutgoing = "";
   
    /**
     * 已接
     */
    private String typeIncomming = "";
   
    /**
     * 未接
     */
    private String typeMissing = "";
   
    /**
     * 未接
     */
    private String typeUnknown = "";
   
    /**
     * 年
     */
    private String yearString = "";
   
    /**
     * 月
     */
    private String monthString = "";
   
    /**
     * 日
     */
    private String dayString = "";
   
    /**
     * 昨天
     */
    private String yesterday = "";
   
    /**
     * 前天
     */
    private String afterYesterday = "";
   
    /**
     * 0
     */
    private String zero = "";
   
    /**
     * 1
     */
    private String one = "";
   
    /**
     * 2
     */
    private String two = "";
   
    /**
     * 3
     */
    private String three = "";
   
    /**
     * 默认的头像
     */
    private Bitmap bitmapDefault = null;
   
    /**
     * 获取系统设置语言
     */
    private String language = "";
   
    /**
     * <默认构造函数>
     */
    public ContactManager(Context context)
    {
        // TODO Auto-generated constructor stub
        this.context = context;
        contentResolver = this.context.getContentResolver();
        resources = this.context.getResources();
        bitmapDefault = BitmapFactory.decodeResource(resources, R.drawable.unkown_photo);
       
        initString();
    }
   
    /** <一句话功能简述>
     *              初始化字符串
     * <功能详细描述>
     * @see [类、类#方法、类#成员]
     */
    private void initString()
    {
        typeHome = resources.getString(R.string.typeHome);
        typeMobile = resources.getString(R.string.typeMobile);
        typeWork = resources.getString(R.string.typeWork);
        typeIncomming = resources.getString(R.string.typeIncomming);
        typeOutgoing = resources.getString(R.string.typeOutgoing);
        typeMissing = resources.getString(R.string.typeMissing);
        typeUnknown = resources.getString(R.string.typeUnknown);
        yearString = resources.getString(R.string.year);
        monthString = resources.getString(R.string.month);
        dayString = resources.getString(R.string.day);
        if (dayString == null || dayString.equals(" ") || dayString.equals(""))
        {
            dayString = " ";
        }
        yesterday = resources.getString(R.string.yesterday);
        afterYesterday = resources.getString(R.string.afterYesterday);
        one = resources.getString(R.string.one);
        two = resources.getString(R.string.two);
        three = resources.getString(R.string.three);
        zero = resources.getString(R.string.zero);
        language = Locale.getDefault().getLanguage();
    }
   
    /**
     * 得到所有的通话记录
     *
     * @return ArrayList<Record>
     */
    public ArrayList<CalllogBean> getAllRecord()
    {
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
       
        // 记录所有的通话记录实体
        ArrayList<CalllogBean> allRecord = new ArrayList<CalllogBean>();
       
        // 需要提出的列
        String[] projections =
            {CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DURATION, CallLog.Calls.DATE, CallLog.Calls.NEW,
                CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.CACHED_NUMBER_TYPE};
       
        // 通过CallLog.Calls.CACHED_NUMBER_LABEL进行分组
        Cursor cursor =
            contentResolver.query(uri,
                projections,
                "1=1) order by " + CallLog.Calls.DATE + " desc " + " -- ",
                null,
                null);
        String number = "";
        String type = "";
        String counts = "";
        String countsNumber = "";
        String cachedName = "";
        String date = "";
        String cachedNumberLabel = "";
        String typeString = "";
        String dateString = "";
        Bitmap bitmap = null;
        CalllogBean calllogBean = null;
        byte[] bytes = null;
       
        if (cursor != null && cursor.getCount() > 0)
        {
            for (int i = 0; i < cursor.getCount(); i++)
            {
                cursor.moveToPosition(i);
                calllogBean = new CalllogBean();
                number = nullToString(cursor.getString(0));
                type = nullToString(cursor.getString(1));
                counts = nullToString(cursor.getString(2));
                date = nullToString(cursor.getString(3));
                countsNumber = nullToString(cursor.getString(4));
                cachedName = nullToString(cursor.getString(5));
                cachedNumberLabel = nullToString(cursor.getString(6));
                try
                {
                    bytes = cursor.getBlob(7);
                }
                catch (Exception e)
                {
                    // TODO: handle exception
                    Log.e("getAllRecord", e.toString());
                }
               
                typeString = intToString(type);
                dateString = getDateString(date);
                if (bytes != null)
                {
                    try
                    {
                        bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                    }
                    catch (Exception e)
                    {
                        // TODO: handle exception
                        bitmap = bitmapDefault;
                    }
                }
                else
                {
                    bitmap = bitmapDefault;
                }
               
                calllogBean.cachedNumberLabel = cachedNumberLabel;
                calllogBean.type = typeString;
                calllogBean.date = dateString;
                calllogBean.cachedName = cachedName;
                calllogBean.number = number;
                calllogBean.photo = bitmap;
                if (typeString.contains(typeMissing))
                {
                    if (cachedNumberLabel.indexOf("(") >= 0)
                    {
                        calllogBean.counts = counts(countsNumber);
                    }
                    else
                    {
                        calllogBean.counts = counts(counts);
                    }
                   
                }
                else
                {
                    calllogBean.counts = "";
                }
                allRecord.add(calllogBean);
            }
            return allRecord;
        }
        else
        {
            return null;
        }
    }
   
    /** <一句话功能简述>
     *              插入电话号码
     * <功能详细描述>
     * @param number 电话号码
     * @param type 通话方向(1:已接;2:已拨;3:未接)
     * @param cachedNumberLabel 联系人rawId
     * @param cachedName 联系人姓名
     * @param photo 联系人头像
     * @return boolean
     * @see [类、类#方法、类#成员]
     */
    public boolean insertRecord(String number, String type, String cachedNumberLabel, String cachedName, Bitmap photo)
    {
       
        String generalNumber = convertNumber(number);
        String generalNumber86 = convertNumber86(generalNumber);
        String generalNumberPlus86 = convertNumberPlus86(generalNumber);
       
        if (cachedNumberLabel == null || cachedNumberLabel.equals(""))
        {
            cachedNumberLabel = "(" + number + ")";
        }
        byte[] bytes = getByteByBitmap(photo);
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
        String selection =
            CallLog.Calls.CACHED_NUMBER_LABEL + " = ? or " + CallLog.Calls.NUMBER + " = ? or " + CallLog.Calls.NUMBER
                + " = ? or " + CallLog.Calls.NUMBER + " = ? ";
        String[] selectionArgs = {cachedNumberLabel, generalNumber, generalNumber86, generalNumberPlus86};
        String where = CallLog.Calls._ID + " = ? ";
       
        Cursor cursor = contentResolver.query(uri, null, selection, selectionArgs, CallLog.Calls._ID + " desc ");
       
        String id = "";
        String counts = "";
        String countsNumber = "";
        String phoneNumber = "";
        ContentValues cv = new ContentValues();
        Date date = new Date();
        long dateLong = date.getTime();
        String dateString = String.valueOf(dateLong);
        int countsInt = 0;
        int countsIntNumber = 0;
        try
        {
            if (cursor != null && cursor.getCount() > 0)
            {
                cursor.moveToPosition(0);
                id = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls._ID));
                counts = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.DURATION));
                phoneNumber = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                countsNumber = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NEW));
               
                countsInt = Integer.parseInt(counts);
                countsIntNumber = Integer.parseInt(countsNumber);
               
                if (type.equals(three)
                    && (number.equals(phoneNumber) || number.equals(generalNumber) || number.equals(generalNumber86) || number.equals(generalNumberPlus86)))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.NEW, String.valueOf(countsIntNumber + 1));
                    cv.put(CallLog.Calls.DURATION, String.valueOf(countsInt + 1));
                }
                else if (type.equals(three) && !number.equals(phoneNumber) && !number.equals(generalNumber)
                    && !number.equals(generalNumber) && !number.equals(generalNumber86)
                    && !number.equals(generalNumberPlus86))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.NEW, one);
                    cv.put(CallLog.Calls.DURATION, String.valueOf(countsInt + 1));
                }
                else
                {
                    cv.clear();
                    cv.put(CallLog.Calls.DURATION, zero);
                    cv.put(CallLog.Calls.NEW, zero);
                }
                cv.put(CallLog.Calls.NUMBER, number);
                cv.put(CallLog.Calls.DATE, dateString);
                cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, cachedNumberLabel);
                cv.put(CallLog.Calls.TYPE, type);
                cv.put(CallLog.Calls.CACHED_NAME, cachedName);
                cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                contentResolver.update(uri, cv, where, new String[] {id});
            }
            else
            {
                if (type.equals(three))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.NEW, one);
                    cv.put(CallLog.Calls.DURATION, one);
                }
                else
                {
                    cv.clear();
                    cv.put(CallLog.Calls.NEW, zero);
                    cv.put(CallLog.Calls.DURATION, zero);
                }
                cv.put(CallLog.Calls.NUMBER, number);
                cv.put(CallLog.Calls.DATE, dateString);
                cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, cachedNumberLabel);
                cv.put(CallLog.Calls.TYPE, type);
                cv.put(CallLog.Calls.CACHED_NAME, cachedName);
                cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                contentResolver.insert(uri, cv);
            }
           
            return true;
        }
        catch (Exception e)
        {
            // TODO: handle exception
            Log.e("insertRecord", e.toString());
            cursor.close();
            return false;
        }
    }
   
    /** <一句话功能简述>
     *              删除该联系人的所有通话记录
     * <功能详细描述>
     * @param cachedNumberLabel 联系人rawId
     * @param number 电话号码
     * @see [类、类#方法、类#成员]
     */
    public void deleteRecord(String cachedNumberLabel, String number)
    {
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
        String where = "";
        String[] selectionArgs = null;
       
        if (cachedNumberLabel != null)
        {
            try
            {
                where = CallLog.Calls.CACHED_NUMBER_LABEL + " = ? or " + CallLog.Calls.NUMBER + " = ? ";
                selectionArgs = new String[] {cachedNumberLabel, number};
               
                contentResolver.delete(uri, where, selectionArgs);
            }
            catch (Exception e)
            {
                // TODO: handle exception
                Log.e("deleteRecord", e.toString());
            }
        }
        else
        {
            where = CallLog.Calls.NUMBER + " = ? ";
            selectionArgs = new String[] {number};
           
            try
            {
                contentResolver.delete(uri, where, selectionArgs);
            }
            catch (Exception e)
            {
                // TODO: handle exception
                Log.e("deleteRecord", e.toString());
            }
        }
       
    }
   
    /** <一句话功能简述>
     *              当添加或更新联系人时,随之更新通话记录列表
     * <功能详细描述>
     * @param name  联系人姓名
     * @param rawId 联系人rawId
     * @param phoneNumberList 联系人电话号码列表
     * @param photo 联系人头像
     * @param isUpdate  联系人是否更新
     * @see [类、类#方法、类#成员]
     */
    public void updateByAdd(String name, long rawId, List<PhoneNumberBean> phoneNumberList, Bitmap photo,
        boolean isUpdate)
    {
        byte[] bytes = getByteByBitmap(photo);
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
        String rawIdString = Long.toString(rawId);
        String id = "";
        String numberHome = "";
        String numberPhone = "";
        String numberWork = "";
        String number = "";
        int phoneCounts = phoneNumberList.size();
        ContentValues cv = new ContentValues();
       
        if (phoneCounts == 1)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
        }
        else if (phoneCounts == 2)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
            numberPhone = phoneNumberList.get(1).phoneNumber;
        }
        else if (phoneCounts == 3)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
            numberPhone = phoneNumberList.get(1).phoneNumber;
            numberWork = phoneNumberList.get(2).phoneNumber;
        }
        String generalHome = convertNumber(numberHome);
        String generalHome86 = convertNumber86(generalHome);
        String generalHomePlus86 = convertNumberPlus86(generalHome);
        String generalPhone = convertNumber(numberPhone);
        String generalPhone86 = convertNumber86(generalPhone);
        String generalPhonePlus86 = convertNumberPlus86(generalPhone);
        String generalWork = convertNumber(numberWork);
        String generalWork86 = convertNumber86(generalWork);
        String generalWorkPlus86 = convertNumberPlus86(generalWork);
       
        String callsNumber = CallLog.Calls.NUMBER;
        String callsLabel = CallLog.Calls.CACHED_NUMBER_LABEL;
        String where =
            callsNumber + " = ? and " + callsLabel + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel
                + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel + " = ? ) or " + " ( " + callsNumber
                + " = ? and " + callsLabel + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel
                + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel + " = ? ) or " + " ( " + callsNumber
                + " = ? and " + callsLabel + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel
                + " = ? ) or " + " ( " + callsNumber + " = ? and " + callsLabel + " = ? ";
        String[] selectionArgs =
            new String[] {generalHome, "(" + generalHome + ")", generalHome86, "(" + generalHome86 + ")",
                generalHomePlus86, "(" + generalHomePlus86 + ")", generalPhone, "(" + generalPhone + ")",
                generalPhone86, "(" + generalPhone86 + ")", generalPhonePlus86, "(" + generalPhonePlus86 + ")",
                generalWork, "(" + generalWork + ")", generalWork86, "(" + generalWork86 + ")", generalWorkPlus86,
                "(" + generalWorkPlus86 + ")"};
       
        Cursor cursor = contentResolver.query(uri, null, where, selectionArgs, CallLog.Calls._ID + " desc ");
       
        if (cursor != null && cursor.getCount() > 0)
        {
            try
            {
                for (int i = 0; i < cursor.getCount(); i++)
                {
                    cursor.moveToPosition(i);
                    id = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls._ID));
                    if (i == 0)
                    {
                        number = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                        if (number.equals(numberHome) || number.equals(generalHome) || number.equals(generalHome86)
                            || number.equals(generalHomePlus86))
                        {
                            cv.clear();
                            cv.put(CallLog.Calls.NUMBER, numberHome);
                        }
                        else if (number.equals(numberPhone) || number.equals(generalPhone)
                            || number.equals(generalPhone86) || number.equals(generalPhonePlus86))
                        {
                            cv.clear();
                            cv.put(CallLog.Calls.NUMBER, numberPhone);
                        }
                        else if (number.equals(numberWork) || number.equals(generalWork)
                            || number.equals(generalWork86) || number.equals(generalWorkPlus86))
                        {
                            cv.clear();
                            cv.put(CallLog.Calls.NUMBER, numberWork);
                        }
                        cv.put(CallLog.Calls.CACHED_NAME, name);
                        cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, rawIdString);
                        cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                        contentResolver.update(uri, cv, CallLog.Calls._ID + " = ? ", new String[] {id});
                    }
                    else
                    {
                        contentResolver.delete(uri, CallLog.Calls._ID + " = ? ", new String[] {id});
                    }
                }
               
            }
            catch (Exception e)
            {
                // TODO: handle exception
                Log.e("updateByAdd", e.toString());
            }
            finally
            {
                cursor.close();
            }
        }
        if (isUpdate)
        {
            updateByUpdate(name, rawId, phoneNumberList, photo);
        }
    }
   
    /** <一句话功能简述>
     *              当添加或更新联系人时,随之更新通话记录列表
     * <功能详细描述>
     * @param name  联系人姓名
     * @param rawId 联系人rawId
     * @param phoneNumberList 联系人电话号码列表
     * @param photo 联系人头像
     * @see [类、类#方法、类#成员]
     */
    public void updateByUpdate(String name, long rawId, List<PhoneNumberBean> phoneNumberList, Bitmap photo)
    {
        byte[] bytes = getByteByBitmap(photo);
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
        String rawIdString = Long.toString(rawId);
        String id = "";
        String numberHome = "";
        String numberPhone = "";
        String numberWork = "";
        String number = "";
        int phoneCounts = phoneNumberList.size();
        ContentValues cv = new ContentValues();
       
        if (phoneCounts == 1)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
        }
        else if (phoneCounts == 2)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
            numberPhone = phoneNumberList.get(1).phoneNumber;
        }
        else if (phoneCounts == 3)
        {
            numberHome = phoneNumberList.get(0).phoneNumber;
            numberPhone = phoneNumberList.get(1).phoneNumber;
            numberWork = phoneNumberList.get(2).phoneNumber;
        }
        String generalHome = convertNumber(numberHome);
        String generalHome86 = convertNumber86(generalHome);
        String generalHomePlus86 = convertNumberPlus86(generalHome);
        String generalPhone = convertNumber(numberPhone);
        String generalPhone86 = convertNumber86(generalPhone);
        String generalPhonePlus86 = convertNumberPlus86(generalPhone);
        String generalWork = convertNumber(numberWork);
        String generalWork86 = convertNumber86(generalWork);
        String generalWorkPlus86 = convertNumberPlus86(generalWork);
       
        String where01 = CallLog.Calls.CACHED_NUMBER_LABEL + " = ? ";
        String[] selectionArgs01 = new String[] {rawIdString};
        Cursor cursor01 = contentResolver.query(uri, null, where01, selectionArgs01, CallLog.Calls._ID + " desc ");
        if (cursor01 != null && cursor01.getCount() > 0)
        {
            try
            {
                cursor01.moveToPosition(0);
                number = cursor01.getString(cursor01.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                id = cursor01.getString(cursor01.getColumnIndexOrThrow(CallLog.Calls._ID));
               
                if (number.equals(numberHome) || number.equals(generalHome) || number.equals(generalHome86)
                    || number.equals(generalHomePlus86))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.CACHED_NAME, name);
                    cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                    cv.put(CallLog.Calls.NUMBER, numberHome);
                }
                else if (number.equals(numberPhone) || number.equals(generalPhone) || number.equals(generalPhone86)
                    || number.equals(generalPhonePlus86))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.CACHED_NAME, name);
                    cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                    cv.put(CallLog.Calls.NUMBER, numberPhone);
                }
                else if (number.equals(numberWork) || number.equals(generalWork) || number.equals(generalWork86)
                    || number.equals(generalWorkPlus86))
                {
                    cv.clear();
                    cv.put(CallLog.Calls.CACHED_NAME, name);
                    cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, bytes);
                    cv.put(CallLog.Calls.NUMBER, numberWork);
                }
                else
                {
                    cv.clear();
                    cv.put(CallLog.Calls.CACHED_NAME, "");
                    cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, "(" + number + ")");
                    cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, "");
                }
               
                contentResolver.update(uri, cv, CallLog.Calls._ID + " = ? ", new String[] {id});
               
            }
            catch (Exception e)
            {
                // TODO: handle exception
                Log.e("updateByAdd", e.toString());
            }
            finally
            {
                cursor01.close();
            }
        }
    }
   
    /** <一句话功能简述>
     *              若号码前有86或+86则将86或+86去掉
     * <功能详细描述>
     * @param number number
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String convertNumber(String number)
    {
        String generalNumber = "";
        if (number.startsWith("86"))
        {
            generalNumber = number.substring(2);
        }
        else if (number.startsWith("+86"))
        {
            generalNumber = number.substring(3);
        }
        else
        {
            generalNumber = number;
        }
        return generalNumber;
    }
   
    /** <一句话功能简述>
     *              转为86开头的号码
     * <功能详细描述>
     * @param number 电话号码
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String convertNumber86(String number)
    {
        String number86 = "";
        if (number != null && !number.equals(""))
        {
            number86 = "86" + number;
        }
        return number86;
    }
   
    /** <一句话功能简述>
     *              转为+86开头的号码
     * <功能详细描述>
     * @param number 电话号码
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String convertNumberPlus86(String number)
    {
        String numberPlus86 = "";
        if (number != null && !number.equals(""))
        {
            numberPlus86 = "+86" + number;
        }
        return numberPlus86;
    }
   
    /** <一句话功能简述>
     *              当删除联系人时,随之更新通话记录列表
     * <功能详细描述>
     * @param rawId 联系人rawId
     * @see [类、类#方法、类#成员]
     */
    public void updateByDelete(long rawId)
    {
        // 通话记录数据库uri
        Uri uri = CallLog.Calls.CONTENT_URI;
        String rawIdString = Long.toString(rawId);
        String where = CallLog.Calls.CACHED_NUMBER_LABEL + " = ? ";
        String[] selectionArgs = new String[] {rawIdString};
        Cursor cursor = contentResolver.query(uri, null, where, selectionArgs, CallLog.Calls._ID + " desc ");
        String id = "";
        String number = "";
        ContentValues cv = new ContentValues();
        if (cursor != null && cursor.getCount() > 0)
        {
            try
            {
                cursor.moveToPosition(0);
                id = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls._ID));
                number = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
               
                cv.clear();
                cv.put(CallLog.Calls.CACHED_NAME, "");
                cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, "(" + number + ")");
                cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, "");
                contentResolver.update(uri, cv, CallLog.Calls._ID + " = ? ", new String[] {id});
               
            }
            catch (Exception e)
            {
                // TODO: handle exception
                Log.e("updateByDelete", e.toString());
            }
            finally
            {
                cursor.close();
            }
        }
       
    }
   
    /** <一句话功能简述>
     *              将bitmap转换为byte
     * <功能详细描述>
     * @param photo 联系人头像
     * @return byte[]
     * @see [类、类#方法、类#成员]
     */
    public byte[] getByteByBitmap(Bitmap photo)
    {
        byte[] bytes = null;
        ByteArrayOutputStream baos = null;
        if (null != photo)
        {
            baos = new ByteArrayOutputStream();
            photo.compress(CompressFormat.JPEG, 50, baos);
            bytes = baos.toByteArray();
        }
        return bytes;
    }
   
    /**
     * <一句话功能简述>
     *              通过联系人Id获得该联系人的所有电话列表
     * <功能详细描述>
     *
     * @param cachedNumberLabel
     *            通话记录中的字段,对应该联系人的Id
     * @return ArrayList<PhoneNumberBean>
     * @see [类、类#方法、类#成员]
     */
    public List<PhoneNumberBean> getPhoneNumberList(String cachedNumberLabel)
    {
        List<PhoneNumberBean> phoneNumberList = new ArrayList<PhoneNumberBean>();
        PhoneNumberBean phoneNumberBean = null;
        String number = "";
        String numberType = "";
        Cursor phoneCursor =
            contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID + " = ?",
                new String[] {cachedNumberLabel},
                null);
        if (phoneCursor != null && phoneCursor.getCount() > 0)
        {
            for (int i = 0; i < phoneCursor.getCount(); i++)
            {
                phoneCursor.moveToPosition(i);
                phoneNumberBean = new PhoneNumberBean();
                number =
                    phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                numberType =
                    phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                phoneNumberBean.phoneNumber = number;
               
                if (one.equals(numberType))
                {
                    phoneNumberBean.phoneType = typeHome;
                }
                else if (two.equals(numberType))
                {
                    phoneNumberBean.phoneType = typeMobile;
                }
                else if (three.equals(numberType))
                {
                    phoneNumberBean.phoneType = typeWork;
                }
               
                phoneNumberList.add(phoneNumberBean);
                phoneNumberBean = null;
            }
            return phoneNumberList;
        }
        else
        {
            return null;
        }
    }
   
    //    /**
    //     * 获取头像
    //     * <功能详细描述>
    //     * @param id id
    //     * @return Bitmap
    //     * @see [类、类#方法、类#成员]
    //     */
    //    private Bitmap queryPhoto(String id)
    //    {
    //        try
    //        {
    //            Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));
    //            InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);
    //            return BitmapFactory.decodeStream(input);
    //        }
    //        catch (Exception e)
    //        {
    //            // TODO: handle exception
    //            Log.e("queryPhoto", e.toString());
    //            return null;
    //        }
    //    }
   
    //    /**
    //     * 根据号码查询联系人信息
    //     * <功能详细描述>
    //     * @param number 号码
    //     * @return PhoneNumberBean
    //     * @see [类、类#方法、类#成员]
    //     */
    //    public ContactBean getContactInfoByNumber(String number)
    //    {
    //        ContactBean contactBean = new ContactBean();
    //       
    //        Cursor cursor =
    //            contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
    //                null,
    //                ContactsContract.CommonDataKinds.Phone.NUMBER + " = '" + number + "'",
    //                null,
    //                null);
    //        if (cursor == null)
    //        {
    //            return null;
    //        }
    //        if (0 == cursor.getCount())
    //        {
    //            return null;
    //        }
    //        cursor.moveToPosition(0);
    //        contactBean.id = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
    //        contactBean.rawId =
    //            cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID));
    //        contactBean.name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
    //       
    //        if (contactBean.name == null)
    //        {
    //            contactBean.name = "";
    //        }
    //        cursor.close();
    //        return contactBean;
    //    }
   
    //    /** <一句话功能简述>
    //     *              通过电话号码查找联系人头像
    //     * <功能详细描述>
    //     * @param number number
    //     * @return Bitmap
    //     * @see [类、类#方法、类#成员]
    //     */
    //    public Bitmap getBitmapByNumber(String number)
    //    {
    //        Bitmap bitmap = null;
    //        Cursor cursor =
    //            contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
    //                null,
    //                ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?",
    //                new String[] {number},
    //                null);
    //        String contactId = "";
    //       
    //        if (cursor != null && cursor.getCount() > 0)
    //        {
    //            cursor.moveToFirst();
    //            contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
    //           
    //            bitmap = getBitmapByContactId(contactId);
    //        }
    //        return bitmap;
    //    }
   
    //    /**
    //     * 通过cached_number_label联系人主键得到联系人的头像Bitmap
    //     *
    //     * @param cachedNumberType
    //     *            联系人对应的主键
    //     * @return Bitmap
    //     */
    //    public Bitmap getBitmapByContactId(String contactId)
    //    {
    //        Bitmap bitmap = null;
    //        InputStream is = null;
    //        try
    //        {
    //            Uri contactPhotoUri =
    //                ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
    //           
    //            is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, contactPhotoUri);
    //            if (is != null)
    //            {
    //                bitmap = BitmapFactory.decodeStream(is);
    //            }
    //        }
    //        catch (Exception e)
    //        {
    //            // TODO: handle exception
    //            Log.e("getBitmapByPhoneNumber", e.toString());
    //        }
    //        finally
    //        {
    //            try
    //            {
    //                if (is != null)
    //                {
    //                    is.close();
    //                }
    //            }
    //            catch (IOException e)
    //            {
    //                // TODO Auto-generated catch block
    //                e.printStackTrace();
    //            }
    //        }
    //        return bitmap;
    //       
    //    }
   
    /** <一句话功能简述>
     *              使null值转换为空字符串
     * <功能详细描述>
     * @see [类、类#方法、类#成员]
     */
    private String nullToString(String value)
    {
        if (value == null)
        {
            return "";
        }
        else
        {
            return value;
        }
    }
   
    /** <一句话功能简述>
     *              date日期格式化为yyyy年MM月dd日HH:mm
     * <功能详细描述>
     * @param date date
     * @return String日期字符串(yyyy年MM月dd日HH:mm)
     * @see [类、类#方法、类#成员]
     */
    private String milliSecondsFormate(String date)
    {
        try
        {
            Calendar calendar = Calendar.getInstance();
            Long milliSeconds = Long.parseLong(date);
            calendar.setTimeInMillis(milliSeconds);
            String year = String.valueOf(calendar.get(Calendar.YEAR));
            String month = String.valueOf(calendar.get(Calendar.MONTH));
            int monthInt = Integer.parseInt(month);
            String monthAdd = String.valueOf(monthInt + 1);
            String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
            String hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
            String minute = String.valueOf(calendar.get(Calendar.MINUTE));
            month = oneToTwo(monthAdd);
            day = oneToTwo(day);
            hour = oneToTwo(hour);
            minute = oneToTwo(minute);
            String dateString = year + yearString + monthAdd + monthString + day + dayString + hour + ":" + minute;
            return dateString;
        }
        catch (Exception e)
        {
            // TODO: handle exception
            Log.e("MilliSecondsFormate", e.toString());
            return date;
        }
       
    }
   
    /** <一句话功能简述>
     *              若date为一位数字,则在date前加“0”
     * <功能详细描述>
     * @param date date
     * @return String
     * @see [类、类#方法、类#成员]
     */
    private String oneToTwo(String date)
    {
        String dateString = "";
        if (date.length() == 1)
        {
            dateString = "0" + date;
        }
        else
        {
            dateString = date;
        }
        return dateString;
    }
   
    /**
     * 是当前日期转换成“yyyy年MM月dd日HH:mm”格式
     *
     * @param date
     *            传入的日期参数
     * @return String
     */
    public String formatDate(Date date)
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm");
        String dateString = sdf.format(date);
        return dateString;
    }
   
    /**
     * 使type类型从数字表示的形式转化为字符串表示的形式
     *
     * @param type
     *            通话方向(1:已接;2:已拨;3:未接)
     * @return String
     */
    public String intToString(String type)
    {
        String typeString = "";
        if (type.equals(one))
        {
            typeString = typeIncomming;
        }
        else if (type.equals(two))
        {
            typeString = typeOutgoing;
        }
        else if (type.equals(three))
        {
            typeString = typeMissing;
        }
        else
        {
            typeString = typeUnknown;
        }
        return typeString;
    }
   
    /**
     * 若未接个数大于1,则显示“(counts)”形式;否则显示“”
     *
     * @param counts
     *            未接个数的显示形式
     * @return String
     */
    public String counts(String counts)
    {
        try
        {
            int countsInt = Integer.parseInt(counts);
            if (countsInt <= 1)
            {
                return "";
            }
            else
            {
                return "( " + countsInt + " )";
            }
        }
        catch (Exception e)
        {
            // TODO: handle exception
            Log.e("counts", e.toString());
            return counts;
        }
       
    }
   
    /** <一句话功能简述>
     *              若日期为当天的时间,则返回“时:分”的形式;若非当天时间,则返回“月-日”的形式;若非当年,则返回“年-月-日”的形式
     * <功能详细描述>
     * @param dateString 传入的日期
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String getDateString(String dateString)
    {
        String timeString = "";
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        String year = String.valueOf(c.get(Calendar.YEAR));
        String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH));
       
        c.add(Calendar.DAY_OF_YEAR, -1);
        String day1 = String.valueOf(c.get(Calendar.DAY_OF_MONTH));
        c.add(Calendar.DAY_OF_YEAR, -1);
        String day2 = String.valueOf(c.get(Calendar.DAY_OF_MONTH));
        String date = milliSecondsFormate(dateString);
        int yearIndex = date.indexOf(yearString);
        if (yearIndex == -1)
        {
            return date;
        }
        int monthIndex = date.lastIndexOf(monthString);
        int dayIndex = date.indexOf(dayString);
        int length = date.length();
        String dateYear = date.substring(0, yearIndex);
        String dateMonth = date.substring(yearIndex + 1, monthIndex);
        String dateDay = date.substring(monthIndex + 1, dayIndex);
        String dateTime = date.substring(dayIndex + 1, length);
        if (dateDay.length() == 2 && (dateDay.substring(0, 1)).equals(zero))
        {
            dateDay = dateDay.substring(1);
        }
        if (dateMonth.length() == 2 && (dateMonth.substring(0, 1)).equals(zero))
        {
            dateMonth = dateMonth.substring(1);
        }
       
        if (dateYear.equalsIgnoreCase(year))
        {
            if (day.equals(dateDay))
            {
                timeString = dateTime;
            }
            else
            {
                if (language.equalsIgnoreCase("zh") || language.equalsIgnoreCase("zh_CN")
                    || language.equalsIgnoreCase("zh_TW"))
                {
                    if (day1.equals(dateDay))
                    {
                        timeString = yesterday;
                    }
                    else if (day2.equals(dateDay))
                    {
                        timeString = afterYesterday;
                    }
                    else
                    {
                        timeString = dateMonth + monthString + dateDay + dayString;
                    }
                }
                else if (language.equalsIgnoreCase("en") || language.equalsIgnoreCase("en_GB")
                    || language.equalsIgnoreCase("en_US") || language.equalsIgnoreCase("en_CA"))
                {
                    timeString = dateMonth + monthString + dateDay + dayString;
                }
                else
                {
                    timeString = dateMonth + monthString + dateDay + dayString;
                }
            }
        }
        else
        {
            timeString = dateYear + yearString + dateMonth + monthString + dateDay + dayString;
        }
        return timeString;
    }