ここに書ける範囲で書きますが、タイトルがすべてを物語っています。私はいくつかの異なる状況でそれをテストしました:
1) 電話オン、マナーモードオフ、アプリオン、フォアグラウンド、画面ロック解除
これはアプリ デリゲートの didReceiveLocalNotification を通過し、didReceiveLocalNotification に含めた処理コードを除いて、音や振動を期待していないことはわかっています。実際に呼び出された処理コード
NSURL *Sound = [[NSBundle mainBundle] URLForResource: self.currentSoundPVC
withExtension: @"caf"];
// Create a system sound object representing the sound file.
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
AudioServicesPlayAlertSound (soundFileObject);
そしてそれは実際に機能します!サウンドを再生し、同時に電話を振動させます。
2) 電話オン、マナーモードオフ、アプリオン、バックグラウンド、画面ロック解除
ここで、次のコードを使用して、アプリ デリゲートの applicationDidEnterBackground で uilocalnotification アラームを設定します。
NSString *Sound = [self.currentSoundPVC stringByAppendingString:@".caf"];
UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
alarm.fireDate = [NSDate dateWithTimeIntervalSinceNow:seconds];
[alarm setSoundName:Sound];
[[UIApplication sharedApplication] scheduleLocalNotification:alarm];
これは部分的にしか機能しません。音はしますが振動はありません!さて、これはアップルの開発者のウェブサイトから引用しているので、バグだと思います。
http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html、ローカル通知の配信のスケジュール設定セクション:
「通知が送信され、サウンドが再生されると、システムはそれをサポートするデバイスで振動もトリガーします。」
さて、明らかに私のiPhoneには当てはまらず、明らかにシミュレーターは振動しないので、これをテストすることはできず、開発者コミュニティでこれに対処したいと思います!
3) 電話オン、サイレントモードオフ、アプリオン、フォアグラウンド、画面ロック
#2と同じ
4) 電話オン、マナーモードオフ、アプリオン、バックグラウンド、画面ロック
#2と同じ
5) 電話オン、サイレントモードオフ、アプリオフ (バックグラウンドプロセス削除)
#2 と同じです。uilocalnotifications はキャンセルされていないため、iOS はまだそれらが有効であると考えています。
6) 電話オン、マナーモードオン、アプリオン、バックグラウンド、画面ロック解除
音も振動も何もありません!これはひどい!いつものように、アップルが箱から出してすぐに機能するものを思いついたことを願っていました!