swift – 如何使用音频反馈在WatchOS上构建Workout应用程序?
发布时间:2020-12-14 05:48:14 所属栏目:百科 来源:网络整理
导读:我正在WatchOS上构建一个非常简单的锻炼应用程序:其中一个功能是在训练期间提供音频反馈.我可以在显示器打开时播放文件,但是当显示器很暗时,手表不会播放我的文件. 有人可以查看我的快速代码并帮助我弄清楚我错过了什么吗? 这是我的extensionDelegate.swif
我正在WatchOS上构建一个非常简单的锻炼应用程序:其中一个功能是在训练期间提供音频反馈.我可以在显示器打开时播放文件,但是当显示器很暗时,手表不会播放我的文件.
有人可以查看我的快速代码并帮助我弄清楚我错过了什么吗? 这是我的extensionDelegate.swift: var audioPlayer = AVAudioPlayer() class ExtensionDelegate: NSObject,WKExtensionDelegate { func applicationDidFinishLaunching() { let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryAmbient,with: .duckOthers) } catch { print("audiosession cannot be set") } do { try audioSession.setActive(true) } catch { print ("audiosession cannot be activated") } let test = URL(fileURLWithPath: Bundle.main.path(forResource: "1",ofType: "m4a")!) try! audioPlayer = AVAudioPlayer(contentsOf: test) audioPlayer.prepareToPlay() audioPlayer.play() } func applicationDidBecomeActive() { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background,optionally refresh the user interface. do { try AVAudioSession.sharedInstance().setActive(true) } catch { print ("shared Instance could not be activated") } } func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) { // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set,so loop through and process each one. for task : WKRefreshBackgroundTask in backgroundTasks { // Check the Class of each task to decide how to process it print ("received background tasks") if task is WKApplicationRefreshBackgroundTask { // Be sure to complete the background task once you’re done. let backgroundTask : WKApplicationRefreshBackgroundTask = task as! WKApplicationRefreshBackgroundTask backgroundTask.setTaskCompleted() } else if task is WKSnapshotRefreshBackgroundTask { // Snapshot tasks have a unique completion call,make sure to set your expiration date let backgroundTask : WKSnapshotRefreshBackgroundTask = task as! WKSnapshotRefreshBackgroundTask backgroundTask.setTaskCompleted(restoredDefaultState: true,estimatedSnapshotExpiration: .distantFuture,userInfo: nil) } else if task is WKWatchConnectivityRefreshBackgroundTask { // Be sure to complete the background task once you’re done. let backgroundTask : WKWatchConnectivityRefreshBackgroundTask = task as! WKWatchConnectivityRefreshBackgroundTask backgroundTask.setTaskCompleted() } else if task is WKURLSessionRefreshBackgroundTask { // Be sure to complete the background task once you’re done. let backgroundTask : WKURLSessionRefreshBackgroundTask = task as! WKURLSessionRefreshBackgroundTask backgroundTask.setTaskCompleted() } else { // make sure to complete unhandled task types task.setTaskCompleted() } } } 在InterfaceController.swift中我调用函数: func startTimer() { // every 30 seconds print ("timer function started") timer = Timer.scheduledTimer(withTimeInterval: 30.0,repeats: true) { [weak self] _ in print("play") audioPlayer.play() } }
我弄清楚我做错了什么:
要关闭屏幕播放声音,将类别设置为AVAudioSessionCategoryPlayback非常重要,而不是环境. 所以我只是为了让它工作:我在extensionDelegate.swift的第10行中更改了一个单词: try audioSession.setCategory(AVAudioSessionCategoryPlayback,with: .duckOthers) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |