当前位置: 代码迷 >> Iphone >> 获取通话记录解决思路
  详细解决方案

获取通话记录解决思路

热度:19   发布时间:2016-04-25 06:23:02.0
获取通话记录
小弟想获取手机某个时间以来所有的通话记录,比如获取自2009年9月9号以来,跟自己联系过的电话(呼叫或被呼叫)的电话号码和联系次数,不知道这个能不能获取到。
多谢了先!

------解决方案--------------------
查查ios-sdk的api先
------解决方案--------------------
肯定没有,有的话苹果审核也不会让你过的
------解决方案--------------------
我提供一个JB的方法,因为call history是以sqlite存储在/var/wireless/Library/CallHistory/call_history.db
所以只要load这个数据库做sql query即可。
------解决方案--------------------
Link-libsqlite3.dylib

C/C++ code
#import <sqlite3.h>- (void)readCallLogs  {       NSMutableArray*   _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];          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);  }
------解决方案--------------------
在非越狱的手机上无法获得系统的通讯记录。