通话记录字段安卓(通话记录字段安卓下载)

hacker|
106

如何导入android系统的通话记录

涉及到对通话记录的读和写、需要在sd卡上写存放通话记录数据的文件,所以需要加权限:

[html] view plaincopy

uses-permission android:name="android.permission.READ_CALL_LOG"/

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/

uses-permission android:name="android.permission.WRITE_CALL_LOG"/

首先,通话记录的获取,只需要获取部分字段即可满足即可:

将数据保存到一个自定义的Model对象中。

[html] view plaincopy

Cursor cursor = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, "date ?", new String[] { "" + timestamp }, CallLog.Calls.DEFAULT_SORT_ORDER);

while (cursor.moveToNext()) {

CalllogModel calllogModel = new CalllogModel();

// name

calllogModel.setName(cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)));

// start call datetime

calllogModel.setDatetime(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));

// phonenumber

calllogModel.setNumber(cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)));

// duration

calllogModel.setDuration(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DURATION)));

// call type

calllogModel.setType(cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)));

// is read

calllogModel.setIs_read(cursor.getInt(cursor.getColumnIndex(CallLog.Calls.IS_READ)));

modifyVector(0, calllogModel, ADD_VECTOR); //调用保存到文件的方法

cursor.close();

cursor = null;

将通话记录导入到系统的数据库中:

[html] view plaincopy

ContentResolver contentResolver = mContext.getContentResolver();

values.put(CallLog.Calls.CACHED_NAME, calllogModel.getName());

values.put(CallLog.Calls.NUMBER, calllogModel.getNumber());

values.put(CallLog.Calls.DATE, calllogModel.getDatetime());

values.put(CallLog.Calls.DURATION, calllogModel.getDuration());

values.put(CallLog.Calls.IS_READ, calllogModel.getIs_read());

values.put(CallLog.Calls.TYPE, calllogModel.getType());

contentResolver.insert(CallLog.Calls.CONTENT_URI, values);

还有两点考虑:

1. 通话记录的保存方式:

选择通过文本文件来保存,一行算足一条通话记录。

每个通话记录以字符串的形式保存到文本文件

java中提供BufferReader和BufferWriter两个类可以支持一行一行的读和写

在导入通话记录的时候,读到一行记录,就处理一行:string-json-model-contentvalues-contentResolver.insert

2. 处理效率和OOM异常避免的情况

在处理导出通话记录的时候,通话记录的条数可能成千上万条。

在这样的情况下,需要注意:

a. 那么多记录数不能全部写到内存中,暂据的内存太大,容易报OOM的错误

b. 将那些数据写入到文件中的时候,不能每一次都打开IO流和关闭IO流,耗时耗资源

解决的方法是,维护一个集合Vectormodel,当从系统数据库中读取到一条记录的时候,将其vector,add(model);当每处理完一个model之后,通过vector.remove(0)获取新的Model对象进行处理。

读取记录的过程和处理记录的过程,用两个线程同步执行。

保证多线程下数据的安全考虑,对该集合变量的操作,用同步锁对其进行限定

[html] view plaincopy

* 需要增加一个对象到集合的时候,type=1;需要获取一个对象的时候,type=2

* @param index

* @param calllogModel

* @param type

* @return

private static synchronized CalllogModel modifyVector(int index, CalllogModel calllogModel, int type) {

switch (type) {

case 1:

if (calllogModels.size()1000) { //确保集合的体积不会过大

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

calllogModels.add(calllogModel);

break;

case 2:

if (!calllogModels.isEmpty()) {

return calllogModels.remove(0);

} else {

return null;

default:

break;

return null;

安卓手机怎么查看通话记录

若使用的是vivo手机,在手机中的“电话”软件里面查询到通话记录;在通话记录页面下拉--选择未接也可查看到未接来电记录。

更多疑惑可进入vivo官网--我的--在线客服--输入人工,咨询在线客服反馈。

android中怎样声明操作通话记录的权利

Android的通话记录都实现在静态类android.provider.CallLog.Calls中。

首先需要读写通话记录的的权限

uses-permission android:name="android.permission.READ_CALL_LOG"/

uses-permission android:name="android.permission.WRITE_CALL_LOG"/

读取

Cursor cursor = context.getContentResolver()

.query(CallLog.Calls.CONTENT_URI,

new String[] { CallLog.Calls.NUMBER,

CallLog.Calls.CACHED_NAME,

CallLog.Calls.TYPE,

CallLog.Calls.DATE,

CallLog.Calls.DURATION}, null,

null, CallLog.Calls.DEFAULT_SORT_ORDER);

写入

ContentValues values = new ContentValues();

values.put(CallLog.Calls.NUMBER, "13200000002");

values.put(CallLog.Calls.TYPE, CallLog.Calls.OUTGOING_TYPE);

values.put(CallLog.Calls.DATE, System.currentTimeMillis());

values.put(CallLog.Calls.DURATION, 1);

context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);

解释一下各字段的含义:

public static final String NUMBER:电话号码,TEXT

public static final String TYPE: 通话记录类型,可为呼入INCOMING_TYPE,呼出OUTGOING_TYPE和未接MISSED_TYPE。

public static final String CACHED_NAME:缓存的联系人名字, TEXT

public static final String DATE: 发生通话的时间,INTEGER

public static final String DURATION: 通话进行的时间,INTEGER

常用的应该就这么多。

1条大神的评论

  • avatar
    访客 2023-04-03 下午 01:57:00

    } catch (InterruptedException e) { // TODO Auto-generat

发表评论