iOS In-Call / Recording(双高)状态栏问题

时间:2015-03-10 11:00:47

标签: ios objective-c avaudiosession pjsip

我有以下问题:

  1. 为什么我必须添加音频背景模式才能看到通话中状态栏..为什么我只能使用VoIP才能看到该栏?

  2. 如果我正在开发VoIP应用程序,将后台模式设置为 VoIP和后台任务帮助我保持通话即使在 背景或锁定的设备,将激活音频(背景模式) 上传到时允许红色双倍高度状态栏 App Store? (我确实播放了一些我希望能够在后台听到的声音(铃声和音调),使用AudioServicesPlayAlertSound(..))

  3. 如何将背景更改为绿色,从红色(据我所知,VoIP /呼叫服务应显示绿色条,录制服务应显示为红色)

  4. 应用程序的VoIP部分由PJSIP管理..这意味着我只负责在连接/断开/保持动作时激活和停用AVAudioSession ..这是否意味着我无法显示绿色状态栏

  5. 如何更改状态栏中的文字,并使用我的通话时间更新文字?

  6. 响应来电后,红色状态栏会激活。我的手机响铃时有没有办法显示它? **

  7. **(不得不问:( ..如果没有标准的API,这肯定是不可能的..我认为这个“显示状态栏”是从数据开始传输时的被动一次性动作/是记录器并结束这个过程)

    PS:我知道有重复......但没有人成功回答问题..在我看来...... Duplicates

    配置AVAudioSession并将其设置为活动/非活动的代码:

    #pragma mark - AVAudioSession
    -(AVAudioSession *) configureAVAudioSession {
        AVAudioSession* session = [AVAudioSession sharedInstance];
        NSError* error = nil; BOOL success = NO;
        success = [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:&error];
        if (error || !success){
            errorlog(@"categError: %@\n", error);
        } else {
            error=nil; //success = NO;
            success = [session setMode:AVAudioSessionModeVoiceChat error:&error];
            if (error || !success){
                errorlog(@"modeError: %@\n", error);
            } else {
                error=nil; //success = NO;
                success = true; //[session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]; // None for Earpiece, Speaker for speaker
                if (error || !success){
                    errorlog(@"OverrideToSpeaker ERR: %@\n", error);
                } else {
                    error=nil; //success = NO;
                    success = true; //[session setPreferredInput:[[session availableInputs] objectAtIndex:0] error:&error]; // Built-In Microphone
                    if (error || !success){
                        errorlog(@"input ERR: %@\n", error);
                    } else {
                        simplelog(@"\n");
                        if ([self setSessionActive])
                            return session;
    
                    }
                }
            }
        }
        return nil;
    }
    
    -(BOOL)setSessionActive {
        NSError *error=nil; BOOL success = NO;
        AVAudioSession* session = [AVAudioSession sharedInstance];
        success = [session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
        if (error || !success){
            errorlog(@"Session set to Active failed with error: %@\n", error);
            return NO;
        } else {
            log(@"Session set to Active");
            return YES;
        }
    }
    
    -(BOOL)setSessionInactive {
        NSError *error; BOOL success = NO;
        AVAudioSession* session = [AVAudioSession sharedInstance];
        success = [session setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
        if (error || !success){
            errorlog(@"Session set to NON-Active failed with error: %@\n", error);
            return NO;
        } else {
            log(@"Session set to NON-Active");
            return YES;
        }
    }
    

    我用来播放铃声/音调音频文件的代码:

        NSURL *ringtonePath =  [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:pathToRingtoneFilename ofType:pathToRingtoneExt]];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef) ringtonePath, &ringtoneID);
    //...
        AudioServicesPlayAlertSound(ringtoneID);
    //...
        AudioServicesDisposeSystemSoundID(ringtoneID);
    

0 个答案:

没有答案