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

来源:互联网 发布:华为hg8010端口限速 编辑:程序博客网 时间:2024/06/06 20:43


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


越狱后的手机的数据库文件可以自由访问,通话记录通常保存在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


原创粉丝点击