我有以下问题:
为什么我必须添加音频背景模式才能看到通话中状态栏..为什么我只能使用VoIP才能看到该栏?
如果我正在开发VoIP应用程序,将后台模式设置为 VoIP和后台任务帮助我保持通话即使在 背景或锁定的设备,将激活音频(背景模式) 上传到时允许红色双倍高度状态栏 App Store? (我确实播放了一些我希望能够在后台听到的声音(铃声和音调),使用AudioServicesPlayAlertSound(..))
如何将背景更改为绿色,从红色(据我所知,VoIP /呼叫服务应显示绿色条,录制服务应显示为红色)
应用程序的VoIP部分由PJSIP管理..这意味着我只负责在连接/断开/保持动作时激活和停用AVAudioSession ..这是否意味着我无法显示绿色状态栏
如何更改状态栏中的文字,并使用我的通话时间更新文字?
响应来电后,红色状态栏会激活。我的手机响铃时有没有办法显示它? **
**(不得不问:( ..如果没有标准的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);