检测在后台发送JSON的电话开始

有电话号码,用户可以点击其中一个来拨打电话。 当通话成功连接时,应用程序应该向我的服务器发送JSON

我遇到了问题 - 只要点击电话号码, Phone应用会弹出,我的应用会被发送到后台。 我已经阅读了CoreTelephony Framework文档和CTCall类的参考,但我不确定这四种状态是什么:

extern NSString const *CTCallStateDialing;
extern NSString const *CTCallStateIncoming;
extern NSString const *CTCallStateConnected;
extern NSString const *CTCallStateDisconnected;

他们是在后台检查还是在Phone应用程序运行时检查。 如何检测它?

我应该使用applicationDidEnterBackground方法和CTCall类来激发JSON吗?


你应该去CTCallCenter并实现一个callEventHandler ,当呼叫状态改变时它将被触发。 这是如何做到这一点。

首先,您需要一个CTCallCenter实例:

@property(nonatomic, strong) CTCallCenter *callCenter;

然后,在应用程序启动时设置一个callEventHandler。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
        _callCenter = [[CTCallCenter alloc] init];

        [_callCenter setCallEventHandler:^(CTCall *call)
         {             
             if ([call.callState isEqualToString: CTCallStateConnected])
             {
                 NSLog(@"Connected");
             }
             else if ([call.callState isEqualToString: CTCallStateDialing])
             {
                 NSLog(@"Dialing");
             }
             else if ([call.callState isEqualToString: CTCallStateDisconnected])
             {
                 NSLog(@"Disconnected");

             } else if ([call.callState isEqualToString: CTCallStateIncoming])
             {
                 NSLog(@"Incoming");
             }
         }];  

    return YES;
}

关于callEventHandler

当呼叫改变状态时,该属性的块对象在缺省优先级全局调度队列上调度。 要处理此类调用事件,请在应用程序中定义一个处理程序块并将其分配给此属性。 您必须实现处理程序块以支持从任何上下文中调用。

来源:CTCallCenter类参考

希望能帮助到你。

链接地址: http://www.djcxy.com/p/62867.html

上一篇: Detect start of a phone call to send JSON in background

下一篇: How does the Navita TEM app get call log information?