7

でカスタム サウンドを動作させようとしていますが、UILocalNotificationサウンドがまったく聞こえません。を使用するUILocalNotificationDefaultSoundNameと、確かにデフォルトのサウンドが得られますが、カスタムサウンドが指定されている場合、サウンドはなく、メッセージだけです。音の長さは 30 秒未満で、私が知る限り、適切な形式です。ファイル情報のスクリーンショットは次のとおりです。

XCode のDerivedDataディレクトリにある .app ディレクトリを調べたところ、alarm.cafファイルがアプリのルートにあり、バンドルに含まれていると思います (右?)。

これはしばらく前に機能していたと確信しており、それ以来 Xcode をアップグレードしました。多分それはヒントですか?

他の回答で述べたように、削除/再インストール/再起動も試みました。ご覧のとおり、私がcancelAllLocalNotifications最初に電話しています。

誰が何が間違っているのか考えていますか?

[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSLog(@"installing alarm");
[arguments pop]; // name
[arguments pop]; // title
alarm.alertBody = [arguments pop];
alarm.fireDate = [[NSDate date] addTimeInterval:[[arguments pop] intValue]/1000];
//alarm.soundName = UILocalNotificationDefaultSoundName;
alarm.soundName = @"alarm.caf";

[[UIApplication sharedApplication] scheduleLocalNotification:alarm];
4

6 に答える 6

3

あなたのコードは良いようです。

プロジェクトをクリーンアップし、デバイス/シミュレーターからアプリをアンインストールしてから、再インストールしてみてください。それは多分役立つかもしれません:)

于 2012-06-28T08:43:01.013 に答える
2

理由はわかりません (ドキュメントも読んでいませんでした)。action プロパティnotification setHasAction:YESをオンにしただけで、サウンドが再生され始めました。

于 2013-01-19T15:12:18.407 に答える
0

おそらく、Xcode プロジェクトにサウンド ファイル (*.caf) を追加しないでください: Build Phases/Copy Bundle Resources.

于 2013-02-12T05:56:48.623 に答える
0

さて、これが何が起こったのかです。アプリがまだ実行されている場合、アプリが通知自体をどのように処理するかを忘れました。私のコードは UIAlertView を表示するだけで、サウンドを再生していませんでした。デフォルトのサウンドで動作する理由がわかりません。いずれにせよ、次のようなコードを AppDelegate に追加しました。

- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification
{
  NSLog(@"didReceiveLocalNotification");
  if (application.applicationState == UIApplicationStateActive) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"MarkMyTime"
      message:notification.alertBody
      delegate:self cancelButtonTitle:@"OK"
      otherButtonTitles:nil];
    NSString *soundFilePath = [[NSBundle mainBundle] 
      pathForResource:notification.soundName ofType:nil];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil];
    [fileURL release];
    player.delegate = self;
    [player prepareToPlay];
    [player play];
    [alertView show];
    if (alertView) {
      [alertView release];
    }
  }
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{
  NSLog(@"Releasing player");
  [player release];
}

これにより、UIAlertView が表示され、通知オブジェクトでサウンドが再生されます。また、AVAudioPlayerDelegate インターフェースを AppDelegate に追加して、デリゲートをプレーヤーに割り当てられるようにする必要もあります。ARC を使用している場合、このコードは少し簡略化できると思います。

@interface AppDelegate : PhoneGapDelegate <AVAudioPlayerDelegate> {

これが最善のアプローチであるかどうかはわかりませんので、お気軽に改善点をお知らせください。

于 2012-06-28T18:26:41.773 に答える
0

iPhone がサイレント モードになっていないことを確認してください (コードが適切であるように思われるため)。

iPhoneの側面にあるボタンを確認してください

于 2012-06-28T08:49:16.390 に答える