より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Xamarin.iOSでアプリの実行中に音楽が停止しないようにする方法

Xamarinのデフォルトではアプリが起動したら、再生されている音楽が停止されてしまいます。

音楽を再生する目的のアプリを開発しているのであれば、このままで良いのですが、通常のアプリではバックグラウンドで音楽を流したままにしたいはずです。

コード

FinishedLaunchingに

AVAudioSession.SharedInstance().SetCategory(AVAudioSessionCategory.Ambient);

というコードを追加します。

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
       AVAudioSession.SharedInstance().SetCategory(AVAudioSessionCategory.Ambient);
       global::Xamarin.Forms.Forms.Init();
       LoadApplication(new App());
       return base.FinishedLaunching(app, options);
}

これは何を行っている?

これは、iOSAPIです。よってSwiftやObjective-Cでも言語仕様により書き方は異なれど、同様のAPIを利用することになるかと思います。

developer.apple.com

AVAudioSessionはOSとアプリの仲介を行うクラスです。このクラスを用いて、アプリの実行時の音響をコントロールします。

そしてSetCategoryで指定できるCategoryは以下に記載されています。

developer.apple.com

デフォルトはSoloAmbientですが、これを音の再生の優先度が低く、音を再生しないアプリのCategoryとなるAmbientを指定しています。

他にも録音して再生するためのカテゴリplayAndRecordなどが存在します。

音楽や効果音も重要な演出ですが、ゲームでも現代は好きな音楽を聴きながらプレイすることが多いです。

ほとんどのアプリケーションがAmbientになるかなと思います。