Android获取通话记录

时间:2021-10-11 22:43:12

效果图:

Android获取通话记录

逻辑代码--MainActivity

package com.example.contentprovider;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.ListView;

public class MainActivity extends Activity {

private ListView lv;
// 声明解析者
private ContentResolver resolver;
// 通话记录的uri
private Uri uri = CallLog.Calls.CONTENT_URI;
// 声明适配器
private Myadapter adapter;
//sds
private List<Map<String, Object>> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
// 得到对象
resolver = getContentResolver();
// 查询通讯录,返回的是游标类型
/*
* 第一个参数:访问某一个ContentProvider的数据接口; 第二个参数:查询数据的字段; 第三个参数:查询数据的条件;
* 第四个参数:第三个参数中包含 ?时,按照?的位置指定其替换的内容; 第五个参数:排序的字段
*/
Cursor cursor = resolver.query(uri, null, null, null, null);
list = new ArrayList<Map<String, Object>>();
//得到通话记录
list=GetData.getData(cursor);
//实例化适配器
adapter = new Myadapter(list, getApplicationContext());
//为ListView绑定适配器
lv.setAdapter(adapter);
}


}
逻辑代码之--得到通话记录

package com.example.contentprovider;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.database.Cursor;
import android.provider.CallLog;


public class GetData {
public static List<Map<String, Object>> getData(Cursor cursor){
//存放通话记录
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
//moveToNext判断下一个是否有数据,返回boolean类型,默认为true
while(cursor.moveToNext()){
Map<String, Object> map=new HashMap<String, Object>();
//得到通话记录
String number=cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
//存入集合中
map.put("number", number);
list.add(map);
}
return list;

}

}
逻辑代码之--自定义适配器

package com.example.contentprovider;

import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class Myadapter extends BaseAdapter {

private List<Map<String, Object>> list;
private Context context;

// 构造方法,接收传过来的集合和上下文
public Myadapter(List<Map<String, Object>> list, Context context) {
super();
this.list = list;
this.context = context;
}

// 返回集合长度
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

// 返回某一id的item
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}

// 返回一个item的id
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

// 返回一个view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 布局加载器,返回一个view对象
View view = LayoutInflater.from(context).inflate(R.layout.item, null);
TextView tv = (TextView) view.findViewById(R.id.tv);
// 得到数据
String number = list.get(position).get("number").toString();
// 显示到控件上
tv.setText(number);
return view;
}

}
布局文件--main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

>
<ImageView
android:id="@+id/iv"
android:src="@drawable/people"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00ffff"
android:text="通讯录"
android:textSize="20sp"
android:layout_centerHorizontal="true"/>

<ListView
android:id="@+id/lv"
android:layout_below="@id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

</RelativeLayout>
布局文件--item

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/iv1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:src="@drawable/a" />

<ImageView
android:id="@+id/iv"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:src="@drawable/icon" />

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_margin="10dp"
android:layout_toRightOf="@+id/iv1"
android:text="ss"
android:textSize="20dp" />



</RelativeLayout>