19

iPhoneのマナーモードでも音を鳴らしたい。

AVAudioPlayerを使用して実行できますか(AVAudioSessionを使用せずに)

(iOS 3.0以降の場合)

前もって感謝します。

4

5 に答える 5

31

実際には、これを行うことができます。オーディオセッションを介して制御され、それ自体とは何の関係もありませんAVAudioPlayer。AudioSessionを使いたくないのはなぜですか?彼らは一緒に素敵に遊ぶ...

アプリでオーディオセッションを初期化する必要があります。そうすれば、再生するオーディオの種類を指定することもできます。あなたが音楽プレーヤーなら、リング/サイレントスイッチが有効になっている場合でも、ユーザーがオーディオを聞きたいと思うのは理にかなっています。

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    AudioSessionSetActive(true);

    // Allow playback even if Ring/Silent switch is on mute
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                             sizeof(sessionCategory),&sessionCategory);

私はまさにこれを行うアプリを持っており、AVAudioPlayerを使用してオーディオを再生し、リング/サイレントスイッチを有効にすると、オーディオを聞くことができます。

更新(2013年11月6日)

上記のアプリでは、上記のコードを正常に使用しましたが、同じ結果を達成するために、代わりに次のコードを(しばらくの間)使用しています。

        AVAudioSession * audioSession = [AVAudioSession sharedInstance];
        NSError * error = nil;
        BOOL結果=NO;
        if([audioSession responsesToSelector:@selector(setActive:withOptions:error :)]){
            結果=[audioSessionsetActive:YES withOptions:0 error:&error]; // iOS6 +
        } そうしないと {
            [audioSession setActive:YES withFlags:0 error:&error]; //iOS5以下
        }
        if(!result && error){
            //エラーに対処します
        }

        エラー=nil;
        結果=[audioSessionsetCategory:AVAudioSessionCategoryPlayback error:&error];

        if(!result && error){
            //エラーに対処します
        }

この回答に対する最新のコメントに照らして、代替案としてこれを投稿すると思いました。:-)

于 2012-04-25T19:44:34.603 に答える
24

MarkGranoffのソリューションは正しいです。ただし、CではなくObj-cで実行する場合は、次の方法でも機能します。

    NSError *error = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
    [[AVAudioSession sharedInstance] setActive:YES error:&error];
于 2012-10-13T00:35:09.270 に答える
5

上記の答えは正解です。以下はSwiftバージョンです。

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    //print("AVAudioSession Category Playback OK")
    do {
        try AVAudioSession.sharedInstance().setActive(true)
        //print("AVAudioSession is Active")
    } catch _ as NSError {
        //print(error.localizedDescription)
    }
} catch _ as NSError {
    //print(error.localizedDescription)
}
于 2016-06-17T06:30:40.317 に答える
2

Swift 4シンプルバージョン:

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
于 2019-02-27T16:43:12.947 に答える
1

これは単にトリックを行います(を使用してAVAudioSession

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
于 2018-02-13T08:34:45.443 に答える