Android通讯录管理二之通话记录获取

上一篇博客讲的是获取联系人信息,这篇是获取通话记录

同样你可以在这里下载http://download.csdn.net/detail/waniu123/8554533

package cn.zxw.contact.domain;

/**
 * 通话记录
 * @author zhan
 *
 */
public class CallLogInfo {
	public String number;
	public long date;
	public int type;
	public CallLogInfo(String number, long date, int type) {
		super();
		this.number = number;
		this.date = date;
		this.type = type;
	}
	public CallLogInfo() {
		super();
	}

}

获取通话记录

/**
	 * 获取所有的通话记录
	 *
	 * @param context
	 * @return
	 */
	public  List<CallLogInfo> getCallLog(Context context) {
		List<CallLogInfo> infos = new ArrayList<CallLogInfo>();
		ContentResolver cr = context.getContentResolver();
		Uri uri = Calls.CONTENT_URI;
		String[] projection = new String[] { Calls.NUMBER, Calls.DATE,
				Calls.TYPE };
		Cursor cursor = cr.query(uri, projection, null, null, null);
		while (cursor.moveToNext()) {
			String number = cursor.getString(0);
			long date = cursor.getLong(1);
			int type = cursor.getInt(2);
			infos.add(new CallLogInfo(number, date, type));
		}
		cursor.close();
		return infos;
	}

activity中代码

package cn.zxw.contact;

import java.text.SimpleDateFormat;
import java.util.List;

import cn.zxw.contact.domain.CallLogInfo;
import cn.zxw.contact.utils.ContactsMsgUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog.Calls;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
/**
 * 获取通话记录
 * 根据电话类型分为 来电、去电、未接三种类型,显示三种不同颜色标记
 * 长按号码,弹出对话框选择:复制号码到拨号盘, 拨号, 发送短信
 * @author zhan
 *
 */

public class CallLogActivity extends Activity {
	private ListView lv;
	private MyAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_contacts_msg_calllog);
		lv = (ListView) findViewById(R.id.lv);
		ContactsMsgUtils contactsMsgUtils = new ContactsMsgUtils();
		List<CallLogInfo> infos = contactsMsgUtils.getCallLog(this);
		adapter = new MyAdapter(infos);
		lv.setAdapter(adapter);
		lv.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {

				CallLogInfo info = (CallLogInfo) adapter.getItem(arg2);
				final String number = info.number;
				String[] items = new String[] { "复制号码到拨号盘", "拨号", "发送短信" };
				new AlertDialog.Builder(CallLogActivity.this).setTitle("操作")
						.setItems(items, new OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								switch (which) {
								case 0:
									// 复制号码到拨号盘
									startActivity(new Intent(
											Intent.ACTION_DIAL, Uri
													.parse("tel:" + number)));
									break;
								case 1:
									// 拨号 权限
									startActivity(new Intent(
											Intent.ACTION_CALL, Uri
													.parse("tel:" + number)));
									break;
								case 2:
									// 发送短信
									startActivity(new Intent(
											Intent.ACTION_SENDTO, Uri
													.parse("sms:" + number)));
									break;

								default:
									break;
								}

							}
						}).show();

				return false;
			}
		});

	}

	// 创建baseadapter

	private class MyAdapter extends BaseAdapter {
		private List<CallLogInfo> infos;
		private LayoutInflater inflater;

		public MyAdapter(List<CallLogInfo> infos) {
			super();
			this.infos = infos;
			inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return infos.size();
		}

		@Override
		public Object getItem(int position) {

			return infos.get(position);
		}

		@Override
		public long getItemId(int position) {

			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = inflater.inflate(R.layout.call_log_item, null);
			TextView tv_number = (TextView) view.findViewById(R.id.tv_number);
			TextView tv_date = (TextView) view.findViewById(R.id.tv_date);
			TextView tv_type = (TextView) view.findViewById(R.id.tv_type);
			// 新建一个对象
			CallLogInfo info = infos.get(position);
			tv_number.setText(info.number);
			// 格式时间
			SimpleDateFormat format = new SimpleDateFormat(
					"yyyy-MM-dd hh:mm:ss");
			String dateStr = format.format(info.date);
			tv_date.setText(dateStr);
			String typeStr = null;
			int color = 0;
			switch (info.type) {
			case Calls.INCOMING_TYPE:
				typeStr = "来电";
				color = Color.BLUE;

				break;
			case Calls.OUTGOING_TYPE:
				typeStr = "去电";
				color = Color.GREEN;

				break;
			case Calls.MISSED_TYPE:
				typeStr = "未接";
				color = Color.RED;

				break;

			default:
				break;
			}
			tv_type.setText(typeStr);
			tv_type.setTextColor(color);
			return view;
		}

	}
}
时间: 2024-10-09 06:25:22

Android通讯录管理二之通话记录获取的相关文章

Android通讯录管理三之短息获取和发送短息

前两篇博客并分别讲了获取联系人和通话记录的知识,这篇主要介绍短信获取知识,短信在通讯管理中应该说是一个难点,因为短信涉及到短息会话和短信详情两个部分,并且短信的数据量比较大,可以采用AsyncQueryHandler框架来查询,同时采用CursorAdapter来绑定数据 其中短信中可以来获取联系人的头像和姓名.这个在代码工具类中有实现,如果联系人存在,则显示姓名,否则显示号码,如果联系人头像存在则显示头像,否则显示默认头像,如图片所示.这两部分功能在联系人和通话记录中均可以实现,有兴趣的童鞋可

Android通讯录管理(获取联系人、通话记录、短信消息)(二)

http://blog.csdn.net/wwj_748/article/details/19970271 Android通讯录管理(获取联系人.通话记录.短信消息)(二) 2014-02-26 11:40 9076人阅读 评论(11) 收藏 举报  分类: [Android通讯录模块开发](10)  版权声明:本文为博主原创文章,未经博主允许不得转载. Android通讯录管理(获取联系人.通话记录.短信消息)(二) 前言:上一篇博客介绍的是获取联系人的实现,本篇博客将介绍通话记录的实现. 同

Android通讯录管理一之联系人获取

正如我们知道的一样,Android的通讯录和短信管理是通过contentprovider来向开发者来开发接口的.必须从ContentResolver入手去解决.其中通讯录操作涉及到系统源码api的使用,特别是在表的uri上面容易弄混.在接下来的几篇文章中蜗牛将陆续为大家推出Android通讯管理相关知识的文章.其中包括联系人获取.通话记录获取.短信获取.短信详情获取发送短信.废话不多说先上图 先看看联系人的表的结构 其中对于开发这来说主要关注以上三个表,其中要用到联合查询,关于三张表的设计可以百

手机通讯录怎么恢复?通话记录如何恢复

手机通讯录怎么恢复?通话记录如何恢复?我们现在是很少的使用到我们的手机通话记录的,就像是我们很少使用我们的手机联系人一样,但是有些时候,在一些独特的场合,自己不小心删除了自己的手机通话记录,你是不是会后悔呢? 若是当你删除了自己的手机通话记录之后,发现自己的手机通话记录中有比较重要的通话记录,自己又没有保存到手机联系人的话,那么我们该怎么办呢?不用着急,我们可以在没有备份的情况下使用下面的方法. 1.首先可以在准备恢复的时候打开电脑,之后在电脑上浏览器上下载安装"互盾安卓恢复大师",之

Android 手机卫士8--删除通话记录

1.编写代码需要注意bug: 再删除通话记录的时候,删除的是以前的通话记录,本次拦截下来的电话号码,通话记录没有删除?????? 问题原因:数据库中本次通话记录的电话号码还没有插入,就做了删除操作 2.bug解决方法: 内容提供者:对外提供数据库的访问方式 内容解析器:用内容提供者提供的访问方式Uri,访问数据库(增删改查) 内容观察者:观察数据库的变化,一旦数据发生改变,调用相应方法 通过内容观察者,观察数据库的插入,一旦有插入,则做删除此条插入数据操作 public void endCall

Android通讯录数据库介绍与基本操作(增删改查)

Android通讯录数据库介绍与基本操作(增删改查) 2014年2月21日 Android通讯录管理总结 这几天导师安排我一个任务就是研究一下Android通讯录获取联系人.通话记录.短信的方法,还有看看不同Android版本之间的异同是否能做到兼容之类的事情.Android通讯录这一块,我个人感觉是挺乱的,网上一堆关于查询本地数据库获取联系人的方法,但似乎都没有仔细说明数据有哪些重要的表,它们之间有什么联系.下面是本人查询资料总结的一下知识点,方便童鞋们以后用到. http://xys2891

Android批量添加通话记录

在前面有提到批量添加联系人:Android批量添加联系人到通讯录,通话记录和通讯录一样都是直接操作ContentProvider.为了使批量更新.插入.删除数据更加方便,android系统引入了 ContentProviderOperation类,使用ContentProviderOperation的理由 1.所有的操作都在一个事务中执行,这样可以保证数据完整性 2.由于批量操作在一个事务中执行,只需要打开和关闭一个事务,比多次打开关闭多个事务性能要好些 3.使用批量操作和多次单个操作相比,减少

操作Android中联系人,通话记录,短息,的URI,和具体的查询语句,字段注解。(根据自己需求)

记住读取联系人需要配置权限:<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 读取联系人的URI: /** * 所有联系人的查询语句 * cotacts2联系人数据库中 * 与联系人相关的几张数据表 * contacts

Android笔记——对系统通话记录的删除操作

手机通话记录是保存在数据库中的,位置:  /data/data/com.android.providers.contacts/databases/calllog.db ,表名:calls 这张表中有个type字段,属性值为常量值: 来电:CallLog.Calls.INCOMING_TYPE (常量值:1) 已拨:CallLog.Calls.OUTGOING_TYPE(常量值:2) 未接:CallLog.Calls.MISSED_TYPE(常量值:3) 这是最常见的,number字段表示电话号码