iOS 中监听来电,耳机拔插事件

项目中有音频播放,当手机有来电和耳机拔插等行为时,需要做一些操作

来电监听,创建CTCallCenter

@property (nonatomic, strong) CTCallCenter *callCenter ;/*!*电话监听*/

初始化callCenter

if (!self.callCenter) {

    self.callCenter = [[CTCallCenter alloc] init];

}

在callCenter的一些事件处理callEventHandler,是一个block回调,我用__weak来调用属性,避免block中内存泄漏

__weak typeof(self) weakSelf = self;

self.callCenter.callEventHandler = ^(CTCall* call) {

    if ([call.callState isEqualToString:CTCallStateDisconnected]){

    NSLog(@"挂断了电话咯");

    }else if ([call.callState isEqualToString:CTCallStateConnected]){

    NSLog(@"电话通了");

    }else if([call.callState isEqualToString:CTCallStateIncoming]){//在这里可以做一些操作,比如:记录来电话前播放器状态

    NSLog(@"来电话了");
    //来电话了,由于是音频项目,监听来电事件
    if (weakSelf.player.timeControlStatus == AVPlayerTimeControlStatusPlaying) {//AVPlayer系统方法,检测播放器状态,是播放状态还是暂停状态

    }else if((weakSelf.player.timeControlStatus == AVPlayerTimeControlStatusPaused)){

    //记录播放器状态,用中间变量记录状态可以保证全局使用

}

    }else if ([call.callState isEqualToString:CTCallStateDialing]){

    NSLog(@"正在播出电话call is dialing");

    }else{

    NSLog(@"什么都没做");

}

监听耳机拔插

监听耳机是一个系统的单例方法,通过发送通知来做操作

[[AVAudioSession sharedInstance] setActive:YES error:nil];//创建单例对象并且使其设置为活跃状态.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioRouteChangeListenerCallback:)  name:AVAudioSessionRouteChangeNotification object:nil];//设置通知

实现通知方法

- (void)audioRouteChangeListenerCallback:(NSNotification*)notification {

    NSDictionary *interuptionDict = notification.userInfo;

    NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];

    switch (routeChangeReason) {

        case AVAudioSessionRouteChangeReasonNewDeviceAvailable:

         NSLog(@"耳机插入");

        break;

        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:

        //耳机拔出

        dispatch_async(dispatch_get_main_queue(), ^{

        //做操作,用主线程调用,如果不用主线程会报黄,提示,从一个线程跳到另一个线程容易产生崩溃,所以这里要用主线程去做操作

    });

        break;

}

你可能感兴趣的:(iOS 中监听来电,耳机拔插事件)