/** * 根据id获取联系人姓名 * @param id * @return */ private String getContactNameById(String id) { if(TextUtils.isEmpty(id)) { return null; } String name = null; String[] projection = {Phone.DISPLAY_NAME}; Cursor cur = null; try { cur = mContext.getContentResolver().query(Phone.CONTENT_URI, projection, Phone.RAW_CONTACT_ID + "=?", new String[]{id}, null); if (cur != null) { cur.moveToFirst(); name = cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME)); } } catch(Exception e) { System.out.println(e.toString()); e.printStackTrace(); } finally { if(cur != null) { cur.close(); cur = null; } } return name; } /** * 读取联系人纪念日 */ public ArrayList<SCEvent> loadBirth(Context context) { ArrayList<SCEvent> list = new ArrayList<SCEvent>(); Cursor cur = null; try { String[] projection = new String[]{ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.Data.DATA1, Event.TYPE}; String selection = Event.MIMETYPE + "='" + Event.CONTENT_ITEM_TYPE + "' AND (" + Event.TYPE + "='" + Event.TYPE_BIRTHDAY + "'" + " or " + Event.TYPE + "='" + Event.TYPE_ANNIVERSARY + "')"; cur = context.getContentResolver() .query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null); LogUtils.d("loadBirth", "begin loadBirth..."); if (cur != null) { SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd"); while (cur.moveToNext()) { if (cur.getString(cur.getColumnIndex(ContactsContract.Data.DATA1)) != null) { String birthday = cur.getString(cur.getColumnIndex( ContactsContract.Data.DATA1)); if(!TextUtils.isEmpty(birthday)) { String[] births = birthday.split("T"); birthday = births[0]; long time = bartDateFormat.parse(birthday).getTime(); String id = cur.getString(cur.getColumnIndex( ContactsContract.Data.RAW_CONTACT_ID)); int type = cur.getInt(cur.getColumnIndex(Event.TYPE)); String name = getContactNameById(id); if(!TextUtils.isEmpty(name)) { SCEvent e = new SCEvent(); e.setmName(name); Calendar c = Calendar.getInstance(); c.setTimeInMillis(time); c.set(Calendar.HOUR_OF_DAY, 9); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); e.setmNormalAlertTime(c.getTimeInMillis()); int year = c.get(Calendar.YEAR); e.setmBirthdayYear(year); e.setmBirthdayMonth(c.get(Calendar.MONTH) + 1); e.setmBirthdayDay(c.get(Calendar.DAY_OF_MONTH)); e.setmBirthdayAdvanceTime(86400000); e.setmIsBirthday(type == Event.TYPE_BIRTHDAY ? 1 : 0); e.setmAlarmType(SCEvent.TYPE_BIRTHDAY_CONTACT); e.setmId(SCEvent.ID_BIRTHDAY_CONTACT); e.setmBackGroundType(SCEvent.EVENT_BIRTHDAY); e.setmType(SCEvent.EVENT_BIRTHDAY); list.add(e); LogUtils.d("loadBirth", " birth=" + birthday + " name=" + name); } } } } } cur.close(); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); } finally { if(cur != null) { cur.close(); cur = null; } } return list; }