当前位置:首页 » 安卓系统 » android获取通话记录

android获取通话记录

发布时间: 2024-10-16 14:09:33

⑴ android手机通讯录以及通话记录在哪个文件夹

安卓手机保存通话记录的默认路径是
/data/data/com.android.providers.contacts/databases/
丢失的通话记录也可以通过数据恢复软件进行恢复。

⑵ android手机 使用详细记录查询 命令

1、使用详细记录查询命令,可以打开自己手机的拨号程序。

⑶ android手机通讯录以及通话记录在哪个文件夹

在内部存储卡的的data/com.android.provides.contacts里面。

以三星的s8为例

找到通讯录以及通话记录方法:

1、打开三星的s8手机,在系统界面找到“我的文件”。

⑷ 怎么查通话录音记录

在进行打电话后,需要进行录音后,打开【文件管理】——【音频】打开后进行播放即可,或者打开拨打号码,点击播放图标就可以听到录制内容。

(参考环境: 手机型号:OPPOK9, 手机系统:Android11 ,ColorOSV11.1 APP版本:音乐40.7)

方法一:文件管理

1.进行打电话时,需要点击通话界面的【录音】。

以上就是通话录音回放的方法,如有其他疑问,欢迎留言交流哦。

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

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

[html] view plain
<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 plain
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)));
// ration
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 plain
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流,耗时耗资源
解决的方法是,维护一个集合Vector<model>,当从系统数据库中读取到一条记录的时候,将其vector,add(model);当每处理完一个model之后,通过vector.remove(0)获取新的Model对象进行处理。
读取记录的过程和处理记录的过程,用两个线程同步执行。
保证多线程下数据的安全考虑,对该集合变量的操作,用同步锁对其进行限定

[html] view plain
/**
* 需要增加一个对象到集合的时候,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;
}

热点内容
c语言优秀 发布:2024-11-24 03:37:18 浏览:208
缓存直通 发布:2024-11-24 03:12:46 浏览:641
手机如何从安卓10升级安卓11 发布:2024-11-24 03:01:40 浏览:852
phpmvc开发框架 发布:2024-11-24 02:57:44 浏览:944
编程脑子疼 发布:2024-11-24 02:31:23 浏览:169
c语言状态机 发布:2024-11-24 02:26:56 浏览:281
用友加密狗破解 发布:2024-11-24 02:23:16 浏览:707
鸿蒙系统如何变回安卓桌面 发布:2024-11-24 02:18:26 浏览:412
c语言填充 发布:2024-11-24 02:10:48 浏览:822
命名空间存储 发布:2024-11-24 02:10:45 浏览:472