7

我正在尝试让自定义声音在 a 上工作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

Your code seems to be good.

Try to clean your project, uninstall your app from your device/simulator, then re-install it. It could help maybe :)

于 2012-06-28T08:43:01.013 回答
2

我不知道原因(我也没有阅读文档),我只是打开了动作属性notification setHasAction:YES并开始播放声音。

于 2013-01-19T15:12:18.407 回答
0

请确保 iPhone 未处于静音模式(因为您的代码似乎不错)

只需检查 iPhone 侧面的按钮

于 2012-06-28T08:49:16.390 回答
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 设置设置 -> 通知中心 -> 您的应用程序 -> 声音 -> “开” 声音应该是“开”

因此,要启用此功能,请在应用程序的 Targets 中的 Capabilities 处选中 Inter App Audio,并且在 Inter-app audio 中将其关闭 Capabilities 将其更改为 On

然后本地通知声音正在工作 inshallah :)

于 2014-03-11T17:54:07.647 回答
0

也许您没有在 Xcode 项目中添加声音文件 (*.caf):Build Phases/Copy Bundle Resources。

于 2013-02-12T05:56:48.623 回答