zoukankan      html  css  js  c++  java
  • [转]获取iPhone通话记录(需越狱)

    转自:http://www.cnblogs.com/ydhliphonedev/archive/2011/10/13/2210435.html

    获取iPhone通话记录(需越狱)

    越狱后的手机的数据库文件可以自由访问,通话记录通常保存在call_History.db这个文件中.只要读取这个文件,我们就能知道目前手机的通话记录了

    下面这段代码检测手机是否能读取到Call_History.db

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDirectoryEnumerator *dirnum = [[NSFileManager defaultManager] enumeratorAtPath: @"/private/"];
    NSString *nextItem = [NSString string];
    while( (nextItem = [dirnum nextObject])) {
    if ([[nextItem pathExtension] isEqualToString: @"db"] ||
    [[nextItem pathExtension] isEqualToString: @"sqlitedb"]) {
    if ([fileManager isReadableFileAtPath:nextItem]) {
    NSLog(@"%@", nextItem);
    }
    }
    }

    通常发现的文件位置为var/wireless/Library/CallHistory/call_history.db,ios3和4可能不同,具体看上面代码打印的结果.

    下面这段代码可以读出数据库中的内容,具体怎样显示自己定制把.

    - (void)readCallLogs
    {
    if (_dataArray == nil) {
    _dataArray = [[NSMutableArray alloc] init];
    }
    [_dataArray removeAllObjects];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *callHisoryDatabasePath = @"var/wireless/Library/CallHistory/call_history.db";
    BOOL callHistoryFileExist = FALSE;
    callHistoryFileExist = [fileManager fileExistsAtPath:callHisoryDatabasePath];
    [fileManager release];
    //NSMutableArray *callHistory = [[NSMutableArray alloc] init];

    if(callHistoryFileExist) {
    if ([fileManager isReadableFileAtPath:callHisoryDatabasePath]) {
    sqlite3 *database;
    if(sqlite3_open([callHisoryDatabasePath UTF8String], &database) == SQLITE_OK) {
    sqlite3_stmt *compiledStatement;
    NSString *sqlStatement = [NSString stringWithString:@"SELECT * FROM call;"];

    int errorCode = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1,
    &compiledStatement, NULL);
    if( errorCode == SQLITE_OK) {
    int count = 1;

    while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
    // Read the data from the result row
    NSMutableDictionary *callHistoryItem = [[NSMutableDictionary alloc] init];
    int numberOfColumns = sqlite3_column_count(compiledStatement);
    NSString *data;
    NSString *columnName;

    for (int i = 0; i < numberOfColumns; i++) {
    columnName = [[NSString alloc] initWithUTF8String:
    (char *)sqlite3_column_name(compiledStatement, i)];

    data = [[NSString alloc] initWithUTF8String:
    (char *)sqlite3_column_text(compiledStatement, i)];


    }
    [callHistoryItem setObject:data forKey:columnName];

    [columnName release];
    [data release];
    }
    [_dataArray addObject:callHistoryItem];
    [callHistoryItem release];
    count++;
    }
    }
    else {
    NSLog(@"Failed to retrieve table");
    NSLog(@"Error Code: %d", errorCode);
    }
    sqlite3_finalize(compiledStatement);
    }
    }
    }
    NSLog(@"%@",_dataArray);
    }

    到此,你就可以读出所有的通话记录了.

    by MAC-z

  • 相关阅读:
    vue2.0 之 douban (二)创建自定义组件tabbar
    vue2.0 之 douban (一)框架搭建 及 整体布局
    react-navigation
    react-native modal
    javascript-使用el表达式获取后台传递的数据
    java Map
    java List集合
    javascript 自定义Map
    javascript Array(数组)
    ZOJ 3868 GCD Expectation (容斥+莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/cklxmu/p/2399462.html
Copyright © 2011-2022 走看看