Android查询通话记录

 	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;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值