我有一個應用程序,要求用戶錄製他們自己的信息,以便在將來某個時候播放。我的意圖是使用UILocalNotification來做到這一點。不幸的是,似乎與本地notif相關的聲音必須存儲在主包中,但用戶無法進行錄製並將其保存在包中。如何使用本地通知播放錄製的聲音?
如何獲取用戶錄製的聲音文件通過本地通知播放?
另外 - 如果應用程序沒有運行捕獲本地通知(沒有等待用戶響應警報),然後播放所需的聲音文件嗎?
謝謝!
我有一個應用程序,要求用戶錄製他們自己的信息,以便在將來某個時候播放。我的意圖是使用UILocalNotification來做到這一點。不幸的是,似乎與本地notif相關的聲音必須存儲在主包中,但用戶無法進行錄製並將其保存在包中。如何使用本地通知播放錄製的聲音?
如何獲取用戶錄製的聲音文件通過本地通知播放?
另外 - 如果應用程序沒有運行捕獲本地通知(沒有等待用戶響應警報),然後播放所需的聲音文件嗎?
謝謝!
你可以通過設置其屬性如下分配(自定義)音效爲UILocalNotification
:
localNotification.soundName = @"MySoundFile.wav";
不幸的是,根據參考,這是不可能使用未存儲的聲音文件中主束或由蘋果宣佈:
對於此屬性,指定文件名的應用程序的主束或UILocalNotificationDefaultSoundName請求默認情況下,聲音資源(包括擴展名)系統聲音。
看到本地通知的soundname
屬性可以參考應用程序的包中的聲音文件的路徑。 無法使用用戶聲音的錄音,因爲它無法在運行時保存到應用程序包中。
您不能顯示默認通知,然後打開應用程序並播放錄製的語音,除非用戶點擊了通知。 這意味着,如果用戶沒有使用手機,他們只會聽錄音的機會是他們拿起手機,解鎖它,然後點擊通知。所以我相信這遠沒有你想要的。
我認爲這是可能的iOS 9,這就是蘋果的文件說:
對於iOS的遠程通知,您可以指定自定義聲音的iOS播放時,它提出了一個本地或遠程通知應用程序。聲音文件可以位於客戶端應用程序的主包中,也可以位於應用程序數據容器的Library/Sounds文件夾中。
我測試保存聲音到庫/聲音文件夾,然後用它與當地的通知和它好工作在iOS 9,之後,我試圖在iOS 8相同,它沒有工作,所以我的conclussion的是,這是可能的iOS 9只
您可以通過這種方式訪問庫目錄:
let fileManager = NSFileManager.defaultManager()
let libraryPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0]
let soundsPath = libraryPath + "/Sounds"
你必須創建目錄,如果不存在的話:
fileManager.createDirectoryAtPath(soundsPath, withIntermediateDirectories: false, attributes: nil)
然後你就可以保存你的聲音了。
有沒有人設法讓這個去?蘋果文檔說,你應該能夠從應用程序容器中的庫/聲音加載聲音文件,但我仍然沒有取得成功,驅動我轉彎,拿着我的應用程序! – Jason
@Jason,這是我創建的項目來測試它, https://github.com/chuy47/RecordedSoundNotification 屏幕有3個按鈕,「開始錄製」,「停止並保存」和「發送通知」使用4秒後自定義聲音,在這個項目中,當應用程序處於前臺時,我不管理通知,爲此,您必須在AppDelegate中的方法「application(application:,didReceiveLocalNotification :)」中實現它,因此對於在此項目中測試自定義聲音,您必須啓動通知(保存聲音後),然後點按主頁按鈕以將應用程序發送到後臺。 – Chuy47
非常感謝。我今天晚上會檢查一下,看起來你可以成爲我的救世主! – Jason
存儲在主包中的聲音文件是否必須是運行時無法更改的靜態資源? –
雖然你可以在模擬器中做到這一點,但它不可能在iOS設備上。 – fscheidl
搜索這裏和那裏後的完美答案... –