Я делаю приложение VOIP, когда поступает входящий вызов, а приложение находится на переднем плане. Я играю на звонке с кодом ниже
self.ringTimer = [[TimerService sharedInstance] createIntervalTimerWithInterval:2500 queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) andBlock:^{
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
}];
NSString *ringingPath = [[NSBundle mainBundle] pathForResource:@"incoming_sound" ofType:@"mp3"];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionMixWithOthers error:nil];
// for normal phone receiver route it to speaker
if ([[audioSession audioRoute] isEqualToString:kAudioSessionDevice_Phone]) {
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
}
NSURL *soundUrl = [NSURL fileURLWithPath:ringingPath];
NSError *error;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error];
self.audioPlayer.numberOfLoops = -1;
[self.audioPlayer play];
Приведенный выше код работает хорошо, и он также учитывает кнопку бесшумного переключения при воспроизведении звука.
Однако, если я сверну приложение, устройство перестанет вибрировать и воспроизводить входящий звук. Это можно обойти, если я установлю категорию AVAudioSession
на AVAudioSessionCategoryPlayback
, но эта категория не отключит звук, когда переключатель без звука включен.
Я вижу другие приложения, такие как
- (Получать входящие в приложении) они могут продолжать вибрировать устройство после сворачивания до тех пор, пока не будет достигнуто время ожидания вызова (никто не ответит) около одной минуты без отображения уведомления перед остановкой (Получить уведомление об окончании вызова).
- (Получать входящие, когда приложение закрыто) они также делают то же самое, потому что, когда я отклоняю уведомление, устройство все еще может вибрировать в течение той же продолжительности.
(Получайте входящие в приложении) они показывают длинное уведомление, чтобы устройство вибрировало. Если я отклоню это уведомление, оно сразу же прекратится.
(Получить входящее, когда приложение закрыто) если я отклоняю уведомление, устройство вибрирует еще 2-3 раза и показывает длинное уведомление (так же, как при получении входящего в приложении)
(Принимать входящие в приложении) Не уверен для скайпа, но для вайбера при сворачивании приложения он мгновенно перестает вибрировать.
(Получить входящие, когда приложение закрыто) Я думаю, что они сделали то же самое, что и facebook (не уверен)
Как сделать так, чтобы устройство вибрировало без уведомления типа Line
при сворачивании приложения?
Если мне удастся найти способ и заставить его работать как Line
, нужно ли мне использовать VoIP push, когда приложение не находится на переднем плане, чтобы реализовать этот метод? (Будет ли работать обычное push-уведомление?)
PushKit
дляReceive incoming in the app
(продолжать вибрировать устройство при сворачивании). Но для вне приложения, я думаю, требуетсяPushKit
. Последуйте вашему предложению и дайте обратную связь в течение выходных. - person SaintTail   schedule 24.11.2016