Ios 如何在本地通知中启用声音?

Ios 如何在本地通知中启用声音?,ios,swift,push-notification,Ios,Swift,Push Notification,我正在用Swift编码,并试图让通知显示出来。它们确实出现了,但声音没有播放。我确实环顾了这个网站和其他网站,我的代码看起来和建议的解决方案一样,所以我不确定出了什么问题 这是我的AppDelegate.swift: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { applicati

我正在用Swift编码,并试图让通知显示出来。它们确实出现了,但声音没有播放。我确实环顾了这个网站和其他网站,我的代码看起来和建议的解决方案一样,所以我不确定出了什么问题

这是我的AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
        UIUserNotificationType.Badge, categories: nil
        ))

    return true
}

这是我的ViewConrtoller.swift中的函数:

override func viewDidLoad() {
    super.viewDidLoad()
    var localNotification: UILocalNotification = UILocalNotification()

    localNotification.soundName = "sample.wav";
    localNotification.fireDate = NSDate(timeIntervalSinceNow: 2)
    localNotification.alertAction = "TEST"
    localNotification.alertBody = "Sound Test"
    localNotification.applicationIconBadgeNumber = 1

    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}

在查阅了一些资料后,我找到了一些可能有用的答案。问题的第一点似乎是关闭设备上的声音,请参见和的答案。另一个解决方案是,即使文件类型正确,更改它也可以解决问题。你也可能会觉得有用,但没有一个答案被接受。正如rmaddy提到的,您可能想看看:

对于iOS中的远程通知,您可以指定iOS在显示应用程序的本地或远程通知时播放的自定义声音。声音文件可以位于客户端应用程序的主捆绑包中,也可以位于应用程序数据容器的Library/Sounds文件夹中

自定义警报声音由iOS系统声音设备播放,因此必须采用以下音频数据格式之一:

线性PCM MA4(IMA/ADPCM) µ定律 阿拉 您可以将音频数据打包为aiff、wav或caf文件。然后,在Xcode中,将声音文件作为应用程序包的非本地化资源添加到项目中,或者添加到数据容器的Library/Sounds文件夹中

您可以使用afconvert工具转换声音。例如,要将16位线性PCM system sound Subside.aiff转换为CAF文件中的IMA4音频,请在终端应用程序中使用以下命令:

afconvert/System/Library/Sounds/subside.aiff~/Desktop/sub.caf-d ima4-f caff-v 通过在QuickTime Player中打开声音并从“电影”菜单中选择“显示电影检查器”,可以检查声音以确定其数据格式

播放自定义声音时必须少于30秒。如果自定义声音超过该限制,则会播放默认的系统声音

编辑: 关于主捆绑包:

每个应用程序都有一个主捆绑包,即包含应用程序代码的捆绑包。当用户启动应用程序时,它会在主捆绑包中找到它立即需要的代码和资源,并将它们加载到内存中。此后,应用程序可以根据需要从主捆绑包或从属捆绑包中动态(并延迟)加载代码和资源

NSbBand类,对于程序代码,CFBuleReFF不透明类型的核心基础为您的应用程序提供了在一个包中定位资源的方法。在Objective-C中,首先必须获得与物理捆绑包对应的NSBundle实例。要获取应用程序的主捆绑包,请调用类方法mainBundle。当给定文件名、扩展名和(可选)捆绑子目录时,其他NSBundle方法返回捆绑资源的路径。获得资源的路径后,可以使用适当的类将其加载到内存中

要查看此信息,请单击捆绑包,然后单击“更多…”

编辑2: 尝试将音频文件添加到代码文件所在的位置,不要为音频添加花哨的文件夹,只需将其插入其中即可

每个应用程序都有一个主捆绑包,即包含应用程序代码的捆绑包。当用户启动应用程序时,它会在主捆绑包中找到它立即需要的代码和资源,并将它们加载到内存中。此后,应用程序可以根据需要从主捆绑包或从属捆绑包中动态(并延迟)加载代码和资源


因此,请将您的音频文件放入主捆绑包中,看看它是否有效。

同时检查声音文件是否包含在“目标成员资格”中,您可以在Xcode中找到该文件的右侧信息窗格中找到该文件。在上面,您可以看到它的“完整路径”。添加文件时,您可能忘记将其包含在所需的目标文件中,因此即使它在项目存档中,也不在目标文件包中,因此无法找到它。

您查看的一些帖子是什么?您可以发布一些链接吗?您需要阅读的部分。我阅读了“准备自定义警报声音”,并将该文件转换为.caf文件,然后将该文件添加到我的项目中(已创建的资源->文件夹中的音频文件夹),但它仍然无法工作。有些帖子是这样的,谢谢!我确实尝试过文件转换(使用与潜艇声音示例完全相同的代码),它只有1秒长。然而,我对“客户端应用程序的主捆绑包”的含义感到困惑?我尝试了“文件>将文件添加到”,但没有成功,然后我尝试将caf文件移动到我的代码所在的文件夹中。@user5405324,我在我的答案中添加了更多信息,这有意义吗,或者您需要了解有关访问主捆绑包的更多信息吗?我需要更多信息。我将我的项目称为“LocalNotification”,并在LocalNotification和LocalNotificationTests文件夹的同一文件夹中创建了一个Resources文件夹,Resources文件夹包含sub.caf,但在iOS模拟器中测试时声音仍然不响。您能在设备上测试吗?如果是,它会发出噪音吗?
override func viewDidLoad() {
    super.viewDidLoad()
    var localNotification: UILocalNotification = UILocalNotification()

    localNotification.soundName = "sample.wav";
    localNotification.fireDate = NSDate(timeIntervalSinceNow: 2)
    localNotification.alertAction = "TEST"
    localNotification.alertBody = "Sound Test"
    localNotification.applicationIconBadgeNumber = 1

    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}