これを行う公開APIはありません。
アプリストアでリリースしないので、プライベートAPIを使用する利点があります。
iPhoneコール履歴は、次のパスに配置されている「call_history.db」に格納されている:
/private/var/root/Library/CallHistory/call_history.db
これで、sqlite C APIを使用して抽出することができます。
呼び出し履歴データベースのパスとスキーマがわかったので、私たちは "呼び出し"テーブルに興味があることがわかります。上記のリンクのおかげで、このテーブルには正確に何が格納されているのかわかります:
これでアクセスするためのコードを書く必要があります。次のコードは "call"テーブルにアクセスし、取得した値を辞書の配列に格納します。独自のクラスを作成し、そのクラスのオブジェクトの配列を使用することができます
NSString *callHisoryDatabasePath = @"/private/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];
}
[callHistory addObject:callHistoryItem];
[callHistoryItem release];
count++;
}
}
else {
NSLog(@"Failed to retrieve table");
NSLog(@"Error Code: %d", errorCode);
}
sqlite3_finalize(compiledStatement);
}
}
}
Reference
SQLite StoreはiOS Callアプリで作成されており、これを読む必要があります –
古いiOSバージョンではhistoryを含むcall_history.dbファイルを使用することによってのみ可能です。 – pedrouan
私は実際に通話履歴を得ることができれば、それはスタートです。オーディオレコーディングはどうですか?方法はありませんか? – Manjuhere