如何整理excel表内通话记录的号码
很简单,
之一步,对 *** 号码所在的列排序,升降任意,目的只是保证同一个号码在一起
第二步,点击数据分页-分类汇总-如果出现提示Excel无法确定标签的时候按确定,将之一行选为标签。在弹出的分类汇总对话框里,选择字段: *** 号码所在列,汇总方式:计数,选定汇总项: *** 号码所在列,按确定。
每个不同的 *** 号码下出现的行里数字就是通话的次数。
如何导入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;
}
如何查自己的所有通话记录
之一,如何查看自己手机的所有通话记录的话,之一打开自己的手机里面的通话记录可以查看,这个是在没有通话记录没有被删除的情况下,可以全部查看,直接看通话记录表就可以查看了,然后。
第二,通过这个手机的号码打运营商 *** 去打印查询 *** 的通话记录清单,直接去营业厅营业台打印通话记录。
第三,登录APP可以查阅自己的通话记录,里面都有的详细的通话记录的话,APP管理里面比如说你用哪个运营商的手机号登录个人的手机中心登录手机号,然后去查个人的通话记录。
恢复通话记录的代码
(一) 前言
Android默认提供了联系人备份到sd卡的功能(代码在com.android.vcard包里面),我们可以把联系人导出成.vcf文件存在sd卡中;如果换手机了,我们又可以把联系人从sd卡文件中导入进来。那么,通话记录我们也能不能做出类似的功能呢?答案是肯定的!
(二) 导出通话记录
既然是备份通话记录,那就肯定包括导出和导入的功能,这里我们先讲导出通话记录。
1. 根据通话记录导出的规范,导出的文件一般以.vcl后缀结尾,中间的内容是
复制代码 代码如下:
BEGIN:VCALL
SLOT:0 //卡槽号 0:单卡手机 1: 双卡手机卡槽1 2: 双卡手机卡槽2
TYPE:1 // *** 类型 1:接入 *** ,2: 呼出 *** 3: 未接 ***
Date: 2013/02/12 14:11:12 GMT //来电或者去点的时间 备份时以GMT时间记录,恢复时显示手机时区对应时间
NUMBER:+86134xxxxx //对方号码
DURATION:5 //持续时间,秒数
END:VCALL
那么这里就是一条通话记录的存储格式了,以BEGIN:VCALL 开始 END:VCALL结束。 //表示的是该字段的含义,只是为了让大家理解,不会导入到实际的文件中去。那么我们来看实际怎么导出的。
2. 查询通话记录列表
ok.. 既然是保存通话记录,那么首先要查询通话记录
Android里面提供了一个CallLogProvider来满足大家的这个需求,它在系统中配置的名字是“call_log”, 所以大家只要提供一个这样的Uri就可以查询了,比如:
复制代码 代码如下:
Uri uri = Uri.parse("context://call_log/calls");
Cursor c = mContext.getContentResolver().query(uri, xxx, xxx );
这样就可以查询出所有的通话记录,得到游标。。
安卓手机应用好多读取联系人信息,通话状态,这些应用真能读到吗?
是的,"读取联系人信息" 这个是真能读取联系人数据库,所有字段都可以读到,但是“通话状态”只是读取可以监听什么时候来 *** 来,什么时候挂断所谓的状态,不是说在监听你的通话内容。
目前很多手机应用都是要读取手机的联系人、信息、通话记录等个人隐私信息,除了少部分社交类应用需要用到部分个人信息外,其实大部分应用完全没有必要读取用户的手机个人信息。
很多应用之所以要读取用户的个人手机信息,主要通过收集、利用或贩卖用户隐私信息,达到非法牟利的目的,不但严重侵犯了用户的个人隐私,而且很容易造成用户的资金损失,所以对于无需使用个人信息,还违规读取个人手机信息的应用尽量不要安装。
相关信息
其实各大互联网公司的APP普遍存在违规获取个人手机信息的问题,并将这些信息用于商业用途,并美其名曰为“大数据”,而“大数据杀熟”,则是通过违规收集个人信息并进行分析做到的,由于这些互联网公司处于垄断地位,用户对于这种企业的应用违规收集信息也是无可奈何。
所以手机个人信息的保护,不但需要相关企业的自律,而且需要构建完整的个人信息法律保护体系。
两张表 *** 本表phonetext 字段:姓名name,移动 *** mobile,宅电ho
通话记录表calllog的联系 *** phone字段填的要么是 *** 本表的mobile要么是homepjone吗??如果是这样,就可以这么简单地写
select
a.id,a.phone,
(
case
when b.mobile is not null then '移动 *** '
when b.homepjone is not null then '宅电'
else '未知通话方式'
end
) as way
from
calllog a
left join phonetext b on a.phone=b.mobile
left join phonetext c on a.phone=c.homepjone
l] view plaincopyuses-permission android:name="android.permission.READ_CALL_LOG"/ uses-permission android:name="android.pe