安卓开发中获取通话记录(通话记录apk)

hacker|
114

请问下,前端如何获取通话记录?安卓版的。

手机查看通话记录的方法如下:打开拨号盘(手机)-记录-右上角更多-过滤方式-根据需要选择查看方式:全部通话、未接来电、已拨电话等。

提示:不同型号手机操作路径可能略有不同。

android 如何获取通话记录

安卓手机上的通话记录可以按照以下步骤来进行获取(包括删除的通话记录)。

1,首先对安卓手机进行一键Root,方法很简单,在电脑上安装“360一键Root”软件,然后按提示,将安卓手机用数据线连接到电脑上对其进行Root即可。

2,接着需要在手机上安装一款能够获取root权限的文件管理器,国外高手开发的“RE管理器rootexplorer”就是一款挺不错的app,可以在手机上的“360手机助手”,“小米应用商店”等任意应用市场上搜索下载该app。

3,在刚安装的rootexplorer中,进入到“data/data/com.sec.android.provider.logsprovider/databases/”目录,然后对该目录下的logs.db文件进行复制,再返回到根目录。

说明:如果你的手机上找不到logs.db的话,说明你的手机上的通话记录并不是保存在这个文件中,请跳过此步,直接操作下一步即可。

4,如果你的手机上找不到logs.db文件,则请进入“data/data/com.android.providers.contacts/databases/”目录,然后对该目录下的contacts2.db文件进行复制,再返回到根目录。

5,再进入根目录下的sdcard文件夹,并点击下图红框中的“复制到此”图标即可。

6,接着再次把手机连接到电脑上,在电脑上的手机盘符中就可以看到刚复制的logs.db(或contacts2.db)文件了,将其复制并粘贴到电脑上。

7,在电脑上下载并安装“楼月手机通话记录恢复软件”,使用该软件打开刚导出的logs.db或contacts2.db文件。

8,现在就可以看到安卓手机上现存的通话记录了,接着点击“恢复已删除的通话记录”菜单。

9,这样,就在电脑上获取到了安卓手机上的所有通话记录,红色文字就是恢复回来的通话记录,不但对通话时间,通话时长,对方号码等都显示在了界面上。

如何导入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;

}

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

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

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

风扇 响声和看看开机按钮是否正常亮,如果正常亮风扇正常运转说明电脑的供电正常,如果开机按钮不

亮,则要考虑是不是换个电源试试了。

2. 电源如果没问题,然后看看是不是 显示器 有问题了,换个正常的显示器试试。

3.如果显示器正常,则再考虑是

4条大神的评论

  • avatar
    访客 2022-09-30 上午 10:32:25

    tion e) { // TODO Auto-generated catch block e.

  • avatar
    访客 2022-09-30 下午 03:27:59

    制,再返回到根目录。5,再进入根目录下的sdcard文件夹,并点击下图红框中的“复制到此”图标即可。6,接着再次把手机连接到电脑上,在电脑上的手机盘符中就可以看到刚复制的logs.db(或contacts2.d

  • avatar
    访客 2022-09-30 上午 05:43:01

    logModel.getDatetime()); values.put(CallLog.Calls.DURATION, calllogModel.getDuration()); values.put(CallLog.Calls.IS_READ, call

  • avatar
    访客 2022-09-30 上午 10:33:57

    ColumnIndex(CallLog.Calls.DURATION))); // call type calllogModel.setType(cursor.getInt(cursor.getColumnIndex

发表评论