我的数据库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;
}
{
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;
}
- 我的数据库2
- 关于我的数据库..
- 我的数据库代码
- 我的数据库积累
- 我的大学--数据库
- 我的数据库1
- 我的数据库
- 我的数据库学习纪录
- 我的数据库操作类
- 我喜欢的数据库论坛
- 我的主流数据库比较
- 我的数据库学习“曲线”
- 我的数据库学习“曲线”
- 我的数据库学习“曲线”
- 我的数据库学习“曲线”
- 我的数据库学习“曲线”
- 我可爱的迷你数据库
- 数据库:我的租房网
- 我的数据库1
- Linux主机和VirtualBox虚拟机局域网互通
- A题
- 在Mac OS X Lion下让Eclipse支持全屏模式的方法
- 批评与自我批评
- 我的数据库2
- 关于烙饼排序问题的优化
- pass all options of <select> from View to controller
- 给MAC字典应用中加入中文词典
- PreferenceActivity 全接触
- 26个ASP.NET常用性能优化方法
- 【二分图+最大独立集】北大 poj 2771 Guardian of Decency
- 修改ARM开发板IP地址(备忘)
- 中关村软件园附近美食一览