大家好,欢迎来到IT知识分享网。
目标:实现通话记录页面记录最近与联系人的通话记录,包括已接,已拨,以及对未接和陌生号码做标识。
有了前面的框架,下面实现具体代码就不像前面那么复杂啦~
一、构建布局文件
layout–>fragment_call中构建通话记录页面
//标题栏
//显示通话记录的listview
layout—>call_listview_item 新建通话记录中每条记录的item
二、开始填充数据,写代码
1,首先构建一个实体类,该类记录了通话记录的基本信息:如姓名,电话,头像,通话时间等
get(){},set(){}………..
}
2,添加一个监听接口,当从数据库中加载数据完毕时回调用此接口中的方法,将参数传入此方法中
3,构建业务类CallBiz:
4,完善CallAdapter
5,在YouluUtil工具类中添加以上用到的方法
//1,adapter中设置时间时调用到getTime方法
public static String getTime(long time) {
//调用getTime方法的时间点
long now=System.currentTimeMillis();
int day=(int) (now/1000/60/60/24-time/1000/60/60/24);
switch (day) {
case 0:
SimpleDateFormat sdf=new SimpleDateFormat(“HH:mm”);
return sdf.format(time);
case 1:
SimpleDateFormat sdf2=new SimpleDateFormat(“HH:mm”);
return “昨天”+sdf2.format(time);
case 2:
return “前天”;
default:
SimpleDateFormat sdf3=new SimpleDateFormat(“yyyy/MM/dd”);
return sdf3.format(time);
}
}
//2.callFragment页面中初始化视图时长按item删除时调用此方法
public static void deleteCall(final Context context, final Call call,
final CallAdapter adapter) {
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_menu_info_details);
builder.setTitle(“删除通知”);
builder.setMessage(“确实要删除通话记录吗?”);
builder.setNegativeButton(“再想想”, null);
builder.setPositiveButton(“删除”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ContentResolver cr=context.getContentResolver();
cr.delete(CallLog.Calls.CONTENT_URI, Calls._ID+”=?”, new String[]{String.valueOf(call.get_id())});
//从listview数据源中删除
adapter.remove(call);
}
});
//特别容易忘的核心代码
builder.create().show();
}
//3,CallFragment刷新页面加载通话记录时调用此方法
public static void asyncgetAllCalls(final Context context,final OnLoadCallFinishListener listener) {
new AsyncTask<Void, Void, List<Call>>(){
@Override
protected List<Call> doInBackground(Void… params) {
List<Call> calls=new ArrayList<Call>();
ContentResolver cr=context.getContentResolver();
Cursor cursor=cr.query(CallLog.Calls.CONTENT_URI,
new String[]{CallLog.Calls._ID,”photo_id”,CallLog.Calls.TYPE,CallLog.Calls.NUMBER,
CallLog.Calls.DATE,CallLog.Calls.CACHED_NAME}, null, null, CallLog.Calls.DATE+” desc”);
while (cursor.moveToNext()) {
Call call=new Call();
call.set_id(cursor.getInt(0));
call.setNumber(cursor.getString(3));
call.setPhoto_id(YouluUtil.getPhotoIdByNumber(context,call.getNumber()));
call.setType(cursor.getInt(2));
if (TextUtils.isEmpty(cursor.getString(5))) {
call.setName(“未知号码”);
}else{
call.setName(cursor.getString(5));//别忘了这句话,给通话记录的姓名赋上值,否则adapter中就会报空指针
}
call.setTime(cursor.getLong(4));
calls.add(call);
}
cursor.close();
return calls;
}
protected void onPostExecute(java.util.List<Call> result) {
listener.OnLoadCallFinish(result);
};
}.execute();
}
protected static int getPhotoIdByNumber(Context context, String number) {
int photoId=0;
ContentResolver cr=context.getContentResolver();
Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, number);
Cursor cursor=cr.query(uri, new String[]{PhoneLookup.PHOTO_ID}, null, null, null);
if (cursor.moveToNext()) {
photoId=cursor.getInt(0);
}
cursor.close();
return photoId;
}
6,修改读取手机通话记录的权限,一定要记得:
下面是运行结果~:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137043.html