[英]alarm clock like sleep cycle ios swift
我一直在尋找答案,但沒有找到。 我想創建一些類似於鬧鍾的應用程序。
它的功能之一將在用戶指定的時間醒來(不足為奇)。 如果您查看睡眠周期應用程序,您會注意到它可以喚醒您,但它也可以跟蹤您的睡眠,因此它必須在后台運行。 此外,它還可以播放喚醒您的歌曲,直到您將其關閉為止(不僅限於30秒鍾,這是通知聲音長度的限制)。 它還可以調高設備的音量。
如果我還沒有真正看到這個應用程序,那么我就不會相信開發人員可以在iPhone上實現這種功能。
我目前的進度:
我可以在用戶指定的時間播放聲音,但前提是應用程序處於前台。 如果播放了聲音,然后用戶單擊“主頁”按鈕,聲音仍然會播放(很酷),但是如果應用程序處於后台,則音樂無法開始播放。 這是一些代碼:
do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: AVAudioSessionCategoryOptions.MixWithOthers) print("AVAudioSession Category Playback OK") do { try AVAudioSession.sharedInstance().setActive(true) print("AVAudioSession is Active") } catch let error as NSError { print(error.localizedDescription) } } catch let error as NSError { print(error.localizedDescription) }
然后我用
AVAudioPlayer
播放一些聲音。 因此,第一個問題是:如何像睡眠周期應用程序一樣播放背景聲音? 而且我確定睡眠周期不會使用通知聲音。 我的第二個問題是如何更改設備的音量(睡眠周期也可以做到這一點,但是在堆棧溢出的情況下,很多人說這是不可能的)。
請幫忙 :)
好的,所以我設法使用一些技巧:
首先,這是可以幫助我設置音頻播放器的功能:
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer? {
//1
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
let url = NSURL.fileURLWithPath(path!)
//2
var audioPlayer:AVAudioPlayer?
// 3
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
} catch {
NSLog("Player not available")
}
return audioPlayer
}
然后,當用戶按下按鈕“啟動警報”時,我這樣做:
silence_audio = setupAudioPlayerWithFile("silence", type:"wav");
silence_audio?.numberOfLoops = -1;
silence_audio?.volume = 1;
silence_audio?.play();
您可以猜到它什么都沒發出來-空着的聲音。 蘋果說:
對於需要更多執行時間才能實現的任務,您必須請求特定的權限才能在后台運行它們而不暫停它們。 在iOS中,只允許特定的應用類型在后台運行:
-在后台播放可聽內容的應用程序,例如音樂播放器應用程序
連續播放或錄制音頻的應用程序(即使該應用程序在后台運行)也可以注冊以在后台執行這些任務。 您可以從Xcode項目中“功能”選項卡的“背景模式”部分啟用音頻支持。 (您還可以通過在應用程序的Info.plist文件中包含音頻值和UIBackgroundModes鍵來啟用此支持。)
之后,我的應用程序便可以不受限制地在后台運行。 如果Apple不允許我發布它,我將開始使用麥克風或類似的東西。 沒有該功能,將無法執行鬧鍾應用程序。
而且設備的更改量非常簡單:
let volumeView = MPVolumeView()
if let view = volumeView.subviews.first as? UISlider{
view.value = 0.3
}
然后將view.value設置為0-1。
希望它會有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.