我正在开发一个类似于培训的应用程序,其中开始的会话应该会让应用程序保持在焦点上。在大约5分钟没有举起我的手腕后,它退回到背景中,看着标准的并发症。应用程序还在运行,但我必须在"dock“中找到它。
有没有关于如何防止应用程序在会话过程中失去焦点的想法?我不需要打开屏幕,但每当我举起手腕时,我需要应用程序来显示统计数据/按钮。我已经找到了applicationWillResignActive(),但这似乎没有任何功能来阻止这一点。
发布于 2020-04-15 02:53:23
我认为您需要的是使用扩展的运行时会话,我认为这是在watchOS 6中引入的。
延长的运行时间会话要求您明确列出您的会话类型,我认为在您的情况下,这将符合“物理治疗”的条件。您需要在项目设置的背景模式部分进行选择
也就是说,由于我不知道应用程序将用于什么活动,如果活动被认为是费力的,它也可能不符合条件。在这种情况下,请注意HKWorkoutSession,我相信它有点像默认锻炼应用程序一样对待锻炼,但我不确定这是不是你想要的。
如果要使用扩展的运行时会话,您可以:
作为会话的WKExtendedRuntimeSession()
WKExtendedRuntimeSessionDelegate)
extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession),用于在会话处于活动状态时进行处理。在需要的时候,不要忘记使用session.start来启动会话。
这里有一些可能会进一步帮助的信息:https://developer.apple.com/documentation/watchkit/using_extended_runtime_sessions
发布于 2020-04-17 01:57:16
多亏了文森特,我找到了正确的苹果文档。
通过将其包装在WKHostingController中,使其与SwiftUI视图一起工作。可以看到,我刚刚将该HKWorkoutSession注入到SwiftUI视图中。然后,我从该视图onAppear和onDissapear内部启动和停止。如果其他人正在努力寻找解决方案,就发帖子。注意,下面只是一个概念。
https://developer.apple.com/documentation/healthkit/hkhealthstore
class ExerciseInterfaceController: WKHostingController<Plank> {
var ed = (WKExtension.shared().delegate as! ExtensionDelegate)
let ws: HKWorkoutSession
override init() {
let hs = HKHealthStore()
let cnf = HKWorkoutConfiguration()
cnf.activityType = .mindAndBody. //just for debugging
cnf.locationType = .indoor
do {
ws = try HKWorkoutSession(healthStore: hs, configuration: cnf)
} catch {
fatalError(error.localizedDescription)
}
}
override var body: Plank {
return Plank(workoutsession: ws)
}https://stackoverflow.com/questions/61201468
复制相似问题