【发布时间】:2014-01-21 07:11:24
【问题描述】:
在我的应用中,当用户接到一些电话时,我尝试上传一些数据。那么,是否可以在来电时或通话过程中通过 GSM 数据网络上传数据?谢谢。
【问题讨论】:
-
您是否要记录通话并向您发送数据?根据我的信息,如果您有 3G 或更高版本的互联网,我们可以使用互联网
标签: ios iphone objective-c phone-call
在我的应用中,当用户接到一些电话时,我尝试上传一些数据。那么,是否可以在来电时或通话过程中通过 GSM 数据网络上传数据?谢谢。
【问题讨论】:
标签: ios iphone objective-c phone-call
您可以使用Core Telephony framework 中的CTCallCenter 类来注册一个事件处理程序,以便您的应用在呼叫开始或结束时收到通知,您可以在那里做任何您想做的事情。
CTCall 提供以下 callState 属性
CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected
希望它能帮助您解决问题。
【讨论】:
首先,您需要在项目中添加 CoreTelephony 框架。
试试下面的代码。它将让您清楚地了解流程。
#import <CoreTelephony/CTCall.h>
#import <CoreTelephony/CTCallCenter.h>
static CTCallCenter *callCenter;
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[_viewController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
if([[UIDevice currentDevice].systemVersion floatValue] >= 4.0)
{
callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call)
{
NSLog(@":: Call id:%@",call.callID);
if (call.callState==CTCallStateDialing)
{
NSLog(@":: Call state:dialing");
}
if (call.callState==CTCallStateIncoming)
{
NSLog(@":: Call state:incoming");
}
if (call.callState==CTCallStateConnected)
{
NSLog(@":: Call state:Connected");
}
if (call.callState==CTCallStateDisconnected)
{
NSLog(@":: Call state:Disconnected");
}
};
}
return YES;
}
【讨论】: