UIWebView: HTML5-аудио-паузы в iOS 6, когда приложение входит в фоновый режим

Добрый день,

Мое приложение - приложение для воспроизведения музыки. Я контролирую<audio>-Tag с Javascript. Пока проблем нет, воспроизведение, пауза, кнопки «Следующая» и «Предыдущая» работают. Когда я поддерживаю устройство в iOS 5, музыка продолжает воспроизводиться, но автоматическая следующая песня не работает. Когда он не находится в режиме ожидания, он работает. А в iOS 6, сразу после нажатия кнопки, музыка затухает.

Кнопка Play / Pause на экране блокировки работает в iOS 5, но не в iOS 6.

 heysamhey23 июл. 2012 г., 17:56
Может быть, это особенность, а не ошибка?
 BoltClock♦23 июл. 2012 г., 17:51
Возможно, подождите и посмотрите, исправят ли они это в более поздней сборке?

Ответы на вопрос(4)

Быстрый Синтаксис:

в AppDelegate:

import AVFoundation

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  do{
      let audio = AVAudioSession.sharedInstance()
      try audio.setCategory(AVAudioSessionCategoryPlayback)
  }catch let error as NSError{
     print(error)
  }
}

Этот плагин заставит ваше приложение игнорировать выключение звука. Это в основном тот же код, что и в других ответах, но он красиво обернут в плагин, так что вам не нужно делать какие-либо ручные изменения цели.

https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio

Запустите эту команду, чтобы добавить ее в свой проект:

cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git

Здесь версия SWIFT 2.0 для установки категории аудиосеанса на «воспроизведение». перед созданием UIWebView.

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
}
catch let error as NSError {
    print(error)  
}

do {
    try AVAudioSession.sharedInstance().setActive(true)
}
catch let error as NSError {
    print(error)  
}
 19 янв. 2017 г., 22:19
Есть ли такой метод для встроенных видео, которые могут воспроизводить звук, когда приложение выходит на задний план. В настоящее время, когда приложение переходит в фоновый режим, звук перестает воспроизводиться. Тем не менее, я могу открыть Центр управления и продолжить играть в любое время.
Решение Вопроса

Начиная с iOS 6, вы ДОЛЖНЫ установить категорию аудио-сеанса на «воспроизведение»; перед созданием UIWebView. Это все, что вам нужно сделать. Нет необходимости делать сеанс активным.

Это также следует использовать для html-видео, потому что, если вы не настроите сеанс, ваше видео будет отключено при выключенном переключателе звонка.

#import <AVFoundation/AVFoundation.h>

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
BOOL ok;
NSError *setCategoryError = nil;
ok = [audioSession setCategory:AVAudioSessionCategoryPlayback
                         error:&setCategoryError];
if (!ok) {
  NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError);
}

Убедитесь, что ваша цель связана с платформой AVFoundation.

Если вы используете Cordova, вам нужно изменить файлplatforms/ios/MyApp/Classes/AppDelegate.mи в конечном итоге будет выглядеть так:

#import "AppDelegate.h"
#import "MainViewController.h"
#import <AVFoundation/AVFoundation.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    BOOL ok;
    NSError *setCategoryError = nil;
    ok = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
    if (!ok) {
        NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError);
    }

    self.viewController = [[MainViewController alloc] init];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

@end

Кроме того, как уже упоминалось в комментариях, вам нужно связать AVFoundation Framework, как описано вэтот ответ:

Open your project with xcode open ./platforms/ios/MyApp.xcworkspace/ Project navigator > target My App > General Scroll to the bottom to find Linked Frameworks and Libraries
 heysamhey27 окт. 2012 г., 15:54
Я никогда не делал Objective-C и понятия не имею, что мне делать с этим фрагментом кода, не могли бы вы объяснить мне?
 24 янв. 2014 г., 17:37
@heysamhey этот код может быть размещен в ViewController.m. Оператор импорта должен идти вверху, а остальные могут идти вviewDidLoad, Чтобы связать структуру AVFoundation, проверьтеthis answer on SO.
 25 сент. 2012 г., 21:06
В примечаниях к выпуску iOS 6 говорится, что UIWebView больше не устанавливает сеанс воспроизведения звука, поэтому вы должны сделать это самостоятельно. Примечание было возможно только добавлено в выпуске GM. По крайней мере, у меня была эта проблема во время бета-тестирования, но я не нашел решения до GM.
 25 сент. 2012 г., 20:18
Ого, похоже, это связано с аналогичной проблемой, с которой я столкнулся. Где ты это узнал? Есть ли документация о том, что изменилось в iOS6 с UIWebView / AVAudioSession?
 04 мая 2015 г., 19:06
@ChrisLundie, может быть, вы должны добавить, что режим звукового фона также должен быть включен на вкладке возможностей XCode. Просто для полноты & apos; ради :-)

Ваш ответ на вопрос