越狱后的手机的数据库文件可以自由访问,通话记录通常保存在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);
- }
到此,你就可以读出所有的通话记录了.
http://www.cnblogs.com/ydhliphonedev/archive/2011/10/13/2210435.html