回复
黑皇帝安全网
管理员
管理员
  • 金钱95848枚
  • 威望90274点
  • 贡献值89936点
  • 注册日期2009-09-12
  • 最后登录2019-01-02
  • 荣誉会员
  • VIP会员
  • 社区版主
阅读:1291723回复:821

安卓手机获取手机通话记录内容

楼主#
更多 发布于:2009-09-20 12:00

 

1、第一步:安卓手机通话记录是哪个文件

/data/data/com.android.providers.contacts/databases/contacts2.db

手机Root后,用RE管理器查看这个SQLite数据库文件。如果是来电记录,在这个数据库的call表里。

 

2、第二步:不获取root权限的情况下查看通话记录

(1)manifest.xml配置相应权限

 

<!-- 获取读取通讯录记录的权限 -->
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

(2)代码实现

 

public classUtil {

/**
* 利用系统CallLog获取通话历史记录
* @return
*/
@SuppressLint("SimpleDateFormat")
public static StringgetCallHistoryList(Context context, ContentResolver cr){

Cursorcs;
cs=cr.query(CallLog.Calls.CONTENT_URI, //系统方式获取通讯录存储地址
new String[]{
CallLog.Calls.CACHED_NAME, //姓名
CallLog.Calls.NUMBER, //号码
CallLog.Calls.TYPE, //呼入/呼出(2)/未接
CallLog.Calls.DATE, //拨打时间
CallLog.Calls.DURATION //通话时长
},null,null,CallLog.Calls.DEFAULT_SORT_ORDER);
StringcallHistoryListStr="";
int i=0;
if(cs!=null &&cs.getCount()>0){
for(cs.moveToFirst();!cs.isAfterLast() & i<50; cs.moveToNext()){
StringcallName=cs.getString(0);
StringcallNumber=cs.getString(1);
//通话类型
int callType=Integer.parseInt(cs.getString(2));
StringcallTypeStr="";
switch (callType) {
case CallLog.Calls.INCOMING_TYPE:
callTypeStr="呼入";
break;
case CallLog.Calls.OUTGOING_TYPE:
callTypeStr="呼出";
break;
case CallLog.Calls.MISSED_TYPE:
callTypeStr="未接";
break;
}
//拨打时间
SimpleDateFormatsdf= newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DatecallDate=newDate(Long.parseLong(cs.getString(3)));
StringcallDateStr=sdf.format(callDate);
//通话时长
int callDuration=Integer.parseInt(cs.getString(4));
int min=callDuration/60;
int sec=callDuration%60;
StringcallDurationStr=min+"分"+sec+"秒";
StringcallOne="类型:" + callTypeStr + ", 称呼:" + callName + ", 号码:"
+callNumber + ", 通话时长:" + callDurationStr + ", 时间:" + callDateStr
+"\n---------------------\n";

callHistoryListStr+=callOne;
i++;
}
}

return callHistoryListStr;
}
}

(3)使用

 

TextViewtv_callHistory=(TextView) getView().findViewById(R.id.id_tv_content1);
tv_callHistory.setText("通讯记录");

//获取通话记录
ContentResolvercr;
cr=getActivity().getContentResolver();
StringcallHistoryListStr=Util.getCallHistoryList(null, cr);
tv_callHistory.setTextSize(12.0f);
tv_callHistory.setText(callHistoryListStr);