Android查询通话记录
2014-10-28 10:34
441 查看
public static final Uri CALL_LOG_CONTENT_URI = CallLog.Calls.CONTENT_URI;//通话记录Uri private static final int QUERY_TOKEN = 304; public static final String[] SUMMARY_PROJECTION = new String[]{ CallLog.Calls._ID, //ID CallLog.Calls.CACHED_NAME, //姓名 CallLog.Calls.CACHED_NUMBER_LABEL, //缓存电话标签 CallLog.Calls.CACHED_NUMBER_TYPE, //缓存电话类型(家庭电话,工作电话等) CallLog.Calls.NUMBER, //电话号码 CallLog.Calls.TYPE, //通话类型(来电,去电,未接) CallLog.Calls.DURATION, //通话时长 CallLog.Calls.DATE, //通话日期 };
源码下载http://download.csdn.net/detail/wds1181977/7621419
2调用AsyncQueryHandler
private final class QueryContactsHandler extends AsyncQueryHandler { public QueryContactsHandler(Context context) { super(context.getContentResolver()); } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { if (cursor == null || cursor.isClosed() || !cursor.moveToFirst()) { mStopLoadHandler.sendEmptyMessage(QUERY_NO_CONTACTS); return; } if (!getActivity().isFinishing()) { if(cursor.getCount() > 0) { mStopLoadHandler.sendEmptyMessage(QUERY_COMPLETE); } else { mStopLoadHandler.sendEmptyMessage(QUERY_NO_CONTACTS); } if(mDateTimeMap != null){ mDateTimeMap.clear(); mDateTimeMap = null; } mDateTimeMap = new HashMap<Long, Boolean>(); long currentDate = 0; while(!cursor.isAfterLast()){ long _id = cursor.getLong(CallLogUtils.ID_INDEX); long date = cursor.getLong(CallLogUtils.DATE_INDEX); date = DateTimeUtils.getStartTimeOfDay(date); if(date != currentDate){ mDateTimeMap.put(_id, true); currentDate = date; } else { mDateTimeMap.put(_id, false); } cursor.moveToNext(); } mContactsAdapter.changeCursor(cursor); } else { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } } }
3开始查询
private void startEmptyQuery(){ if (mQueryContactsHandler == null) { if(LogLevel.DEV){ DevLog.e(TAG, "startEmptyQuery() failed, mQueryContactsHandler is null."); } return; } mQueryContactsHandler.cancelOperation(QUERY_TOKEN); Uri uri = CallLogUtils.CALL_LOG_CONTENT_URI; mQueryContactsHandler.startQuery(QUERY_TOKEN, null, uri, CallLogUtils.SUMMARY_PROJECTION, null, null, CallLogUtils.DEFAULT_SORT_ORDER); }
@Override public void onResume(){ if(LogLevel.MARKET){ MarketLog.i(TAG, "onResume..."); } super.onResume(); startEmptyQuery(); }
4读取Cursor Java Bean CallLogInfo
public static final int ID_INDEX = 0; public static final int CACHED_NAME_INDEX = 1; public static final int CACHED_NUMBER_LABEL_INDEX = 2; public static final int CACHED_NUMBER_TYPE_INDEX = 3; public static final int NUMBER_INDEX = 4; public static final int TYPE_INDEX = 5; public static final int DURATION_INDEX = 6; public static final int DATE_INDEX = 7;
public static CallLogInfo readCallLogInfoByCursor(Cursor cursor){ if(cursor == null || cursor.isClosed()){ return null; } try { CallLogInfo info = new CallLogInfo(); info._id = cursor.getLong(ID_INDEX); info.name = cursor.getString(CACHED_NAME_INDEX); info.number_label = cursor.getString(CACHED_NUMBER_LABEL_INDEX); info.number_type = cursor.getString(CACHED_NUMBER_TYPE_INDEX); info.number = cursor.getString(NUMBER_INDEX); info.type = cursor.getInt(TYPE_INDEX); info.duration = cursor.getLong(DURATION_INDEX); info.date = cursor.getLong(DATE_INDEX); return info; } catch (Exception e){ e.printStackTrace(); return null; } }
电话记录类型
public static final String TYPE = "type"; /** Call log type for incoming calls. */ public static final int INCOMING_TYPE = 1;//来电记录 /** Call log type for outgoing calls. */ public static final int OUTGOING_TYPE = 2;//去电记录 /** Call log type for missed calls. */ public static final int MISSED_TYPE = 3;//未接记录 /** * Call log type for voicemails. * @hide */ public static final int VOICEMAIL_TYPE = 4;//语言信箱
默认排序
public static final String DEFAULT_SORT_ORDER = CallLog.Calls.DEFAULT_SORT_ORDER;
相关文章推荐
- android删除和查询通话记录
- android 通话记录的查询与删除
- android 通话记录的查询与删除
- android 通话记录和联系人查询
- Android之通话记录的查询、删除与插入(1)
- android通话记录的查询与删除
- android 通话记录和联系人查询
- android查询通话记录小结
- Android通讯录、通话记录、短信、应用等模糊查询方法
- android 通话记录和联系人查询
- 操作Android中联系人,通话记录,短息,的URI,和具体的查询语句,字段注解。(根据自己需求)
- android 通话记录的查询与删除
- android 通话记录的查询与删除
- Android 通话记录不包含紧急呼叫问题
- android 通话记录插入 短信插入 联系人插入
- android中获取通话记录
- Android 通话记录列表同一号码显示多次的问题
- android挂断电话 返回 通话记录
- android如何使用BroadcastReceiver后台实现来电通话记录的监听并存取到sqllite数据库通过Contentprovilder实现接口
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —查询单条记录、修改