ローカル通知を使用してリマインダーを表示するiPhone用リマインダーアプリを作成しています。
アプリケーションの実行中にリマインダーが鳴った場合、ローカル通知は表示されません。代わりに、アプリのデリゲートでdidReceiveLocalNotification
メソッドが呼び出され、UIAlertView
をリマインダーテキストとともに表示することで、ローカル通知ダイアログを模倣しています。
アプリの外部でローカル通知が表示されると、デバイスが振動し、 UILocalNotificationDefaultSoundName
で指定されたサウンドが再生されます。繰り返しますが、UIAlertView
を表示するときにアプリでこれを模倣したいと思います。
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
を呼び出してデバイスを振動させることはできますが、ローカル通知のデフォルトサウンドを再生する方法がわかりません。同等のSystemSoundID定数はなく、パスがどうなるかわかりません。
tl; drUIAlertViewを表示するときに、ローカル通知のデフォルトのサウンドを再生したいと思います。何か案は?
良い質問。理想的には、AudioServicesを使用してシステムサウンドを選択する方法があるでしょう。ただし、Appleの「System Sound Services Reference」の次のステートメントは、それ以外のことを示唆しています。
Mac OS Xでは、ユーザーがシステム設定を構成してアラートの画面を点滅させるか、サウンドをレンダリングできない場合にこの関数を呼び出すと、画面が点滅します。 Mac OS Xでは、定数kSystemSoundID_UserPreferredAlertを渡して、システム環境設定でユーザーが選択した警告音を再生します。 iOSには優先ユーザー警告音はありません。
SDKはほとんど提供していないようなので、独自のwavファイルを使用してシステムサウンドを模倣することをお勧めします。次のリンクにニースライブラリがあります。おそらく、探しているサウンドが含まれています。 http://sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.Zip
幸運を!
次の方法でデフォルトの通知音を再生できます。
AudioServicesPlaySystemSound(1315);
this link には、AudioServicesPlaySystemSound(id)のパラメーターとして使用できるIDのリストがあります。
良いコーディング!
デリゲートを.hファイルに設定します。
@interface ViewController : UIViewController <UIAlertViewDelegate>
{
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
@end
そして、上記で宣言したメソッドを設定します。
そして.mファイルでこれを行います:
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ma.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = -1;
[audioPlayer play];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex==0) {
[audioPlayer stop];
}
NSLog(@"U HAVE CLICKED BUTTON");
}
これはAndrew Littleの回答への追加です。
通知音をよりよく模倣するには、オーディオセッションも構成する必要があります。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];
これは、たとえばこの間、音楽を聴いて通知を受け取ります。
上記のセッションのパラメーターは、バックグラウンドでアプリケーションを使用して通知が発生したときに再生されるサウンドと同じように見えます。