iPhoneのマナーモードでも音を鳴らしたい。
AVAudioPlayerを使用して実行できますか(AVAudioSessionを使用せずに)
(iOS 3.0以降の場合)
前もって感謝します。
iPhoneのマナーモードでも音を鳴らしたい。
AVAudioPlayerを使用して実行できますか(AVAudioSessionを使用せずに)
(iOS 3.0以降の場合)
前もって感謝します。
実際には、これを行うことができます。オーディオセッションを介して制御され、それ自体とは何の関係もありません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){
//エラーに対処します
}
この回答に対する最新のコメントに照らして、代替案としてこれを投稿すると思いました。:-)
MarkGranoffのソリューションは正しいです。ただし、CではなくObj-cで実行する場合は、次の方法でも機能します。
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
上記の答えは正解です。以下は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)
}
Swift 4シンプルバージョン:
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
これは単にトリックを行います(を使用してAVAudioSession)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)