您的位置:首页 > 移动开发 > Android开发

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: