27

良い一日、

私のアプリは音楽再生アプリです。<audio>-TagをJavascriptで制御します。これまでのところ問題はなく、再生、一時停止、次と前のボタンが機能しています。iOS 5でデバイスをスタンバイすると、音楽は再生され続けますが、自動次の曲が機能しません。スタンバイ状態でないときは動作します。また、iOS 6では、ボタンを押した直後に音楽がフェードアウトします。

ロック画面の[再生/一時停止]ボタンはiOS5では機能しますが、iOS6では機能しません。

4

4 に答える 4

73

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フレームワークをリンクする必要があります:

  • xcodeでプロジェクトを開きますopen ./platforms/ios/MyApp.xcworkspace/
  • プロジェクトナビゲーター>ターゲットマイアプリ>一般
  • 一番下までスクロールして、リンクされたフレームワークとライブラリを見つけます
于 2012-09-13T21:00:17.637 に答える
1

このプラグインにより、アプリはミュートスイッチを無視します。これは基本的に他の回答と同じコードですが、プラグインにうまくラップされているため、手動でObjectiveCを編集する必要はありません。

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

次のコマンドを実行して、プロジェクトに追加します。

cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git
于 2015-02-05T01:51:10.137 に答える
1

Swift構文:

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)
  }
}
于 2016-03-04T03:39:31.183 に答える
0

ここでは、UIWebViewを作成する前に、オーディオセッションカテゴリを「再生」に設定するSWIFT2.0バージョンを示します。

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)  
}
于 2016-04-18T13:20:01.157 に答える