获取通话记录解决思路

获取通话记录
小弟想获取手机某个时间以来所有的通话记录,比如获取自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);  
}

------解决方案--------------------------------------------------------
在非越狱的手机上无法获得系统的通讯记录。
转载:http://www.myexception.cn/iphone/723202.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Uniapp 中获取通话记录可以通过调用原生插件来实现。以下是一个简单的示例代码,演示如何在 Uniapp 中获取通话记录。 首先,在你的 Uniapp 项目中创建一个原生插件,例如我们可以叫它 `CallLogPlugin`。 在 `CallLogPlugin` 中,你需要实现获取通话记录的方法。具体实现可能因不同平台而有所不同。以下是一个简单的示例,供你参考: Android 平台: ```java public class CallLogPlugin extends CordovaPlugin { private static final int REQUEST_CODE = 1; private CallbackContext callbackContext; @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { this.callbackContext = callbackContext; if (action.equals("getCallLogs")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(cordova.getActivity())) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + cordova.getActivity().getPackageName())); cordova.startActivityForResult((CordovaPlugin) this, intent, REQUEST_CODE); } else { getCallLogs(); } return true; } return false; } private void getCallLogs() { try { JSONArray callLogs = new JSONArray(); String[] projection = { CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.TYPE }; Cursor cursor = cordova.getActivity().getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, null, null, CallLog.Calls.DATE + " DESC"); if (cursor != null && cursor.moveToFirst()) { do { JSONObject callLog = new JSONObject(); callLog.put("number", cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER))); callLog.put("date", cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE))); callLog.put("type", cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE))); callLogs.put(callLog); } while (cursor.moveToNext()); cursor.close(); } callbackContext.success(callLogs); } catch (Exception e) { callbackContext.error("Error retrieving call logs: " + e.getMessage()); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_CODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.canDrawOverlays(cordova.getActivity())) { getCallLogs(); } } } ``` 然后,在你的 Uniapp 项目中,通过调用原生插件来获取通话记录。可以在需要的页面中调用插件方法,例如: ```javascript uni.requireNativePlugin('CallLogPlugin').getCallLogs((res) => { console.log(res); // 处理返回的通话记录数据 }, (err) => { console.error(err); // 处理错误信息 }); ``` 请注意,以上示例代码仅供参考,具体实现可能因平台和需求而有所不同。你需要根据你的项目需求进行相应的调整和扩展。 希望对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值